aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Output/qtmultimedia
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2015-11-11 05:24:51 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2015-11-11 05:24:51 +0000
commitecd95ef11c94e7442728df4fc7307b387769d7eb (patch)
tree8b4f5212a5af2efb16e21244a5e5488aac958d4d /src/plugins/Output/qtmultimedia
parent93a629f11d3b8ff9454093378d15cb75629919e7 (diff)
downloadqmmp-ecd95ef11c94e7442728df4fc7307b387769d7eb.tar.gz
qmmp-ecd95ef11c94e7442728df4fc7307b387769d7eb.tar.bz2
qmmp-ecd95ef11c94e7442728df4fc7307b387769d7eb.zip
adding support of Qt Multimedia output (patch by Ivan Ponomarev)
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@5741 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/Output/qtmultimedia')
-rw-r--r--src/plugins/Output/qtmultimedia/CMakeLists.txt56
-rw-r--r--src/plugins/Output/qtmultimedia/outputqtmultimedia.cpp136
-rw-r--r--src/plugins/Output/qtmultimedia/outputqtmultimedia.h53
-rw-r--r--src/plugins/Output/qtmultimedia/outputqtmultimediafactory.cpp70
-rw-r--r--src/plugins/Output/qtmultimedia/outputqtmultimediafactory.h47
-rw-r--r--src/plugins/Output/qtmultimedia/qtmultimedia.pro42
-rw-r--r--src/plugins/Output/qtmultimedia/settingsdialog.cpp62
-rw-r--r--src/plugins/Output/qtmultimedia/settingsdialog.h41
-rw-r--r--src/plugins/Output/qtmultimedia/settingsdialog.ui87
-rw-r--r--src/plugins/Output/qtmultimedia/translations/qtmultimedia_plugin_en.ts45
-rw-r--r--src/plugins/Output/qtmultimedia/translations/qtmultimedia_plugin_ru.ts45
-rw-r--r--src/plugins/Output/qtmultimedia/translations/translations.qrc6
12 files changed, 690 insertions, 0 deletions
diff --git a/src/plugins/Output/qtmultimedia/CMakeLists.txt b/src/plugins/Output/qtmultimedia/CMakeLists.txt
new file mode 100644
index 000000000..686739002
--- /dev/null
+++ b/src/plugins/Output/qtmultimedia/CMakeLists.txt
@@ -0,0 +1,56 @@
+project(libqtmultimedia)
+
+cmake_minimum_required(VERSION 2.4.7)
+
+if(COMMAND cmake_policy)
+cmake_policy(SET CMP0003 NEW)
+endif(COMMAND cmake_policy)
+
+# qt plugin
+ADD_DEFINITIONS( -Wall )
+ADD_DEFINITIONS(${QT_DEFINITIONS})
+ADD_DEFINITIONS(-DQT_PLUGIN)
+ADD_DEFINITIONS(-DQT_NO_DEBUG)
+ADD_DEFINITIONS(-DQT_SHARED)
+ADD_DEFINITIONS(-DQT_THREAD)
+
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
+
+SET(QT_INCLUDES
+ ${QT_INCLUDES}
+ ${CMAKE_CURRENT_SOURCE_DIR}/../../../
+)
+
+# libqmmp
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../../)
+link_directories(${CMAKE_CURRENT_BINARY_DIR}/../../../qmmp)
+
+SET(libqtmultimedia_SRCS
+ outputqtmultimedia.cpp
+ outputqtmultimediafactory.cpp
+ settingsdialog.cpp
+)
+
+SET(libqtmultimedia_HDRS
+ outputqtmultimedia.h
+)
+
+SET(libqtmultimedia_RCCS translations/translations.qrc)
+
+QT4_ADD_RESOURCES(libqtmultimedia_RCC_SRCS ${libqtmultimedia_RCCS})
+
+SET(libqtmultimedia_UIS
+ settingsdialog.ui
+)
+QT4_WRAP_UI(libqtmultimedia_UIS_H ${libqtmultimedia_UIS})
+
+# Don't forget to include output directory, otherwise
+# the UI file won't be wrapped!
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
+
+IF(${QT_QTMULTIMEDIA_FOUND})
+ ADD_LIBRARY(qtmultimedia MODULE ${libqtmultimedia_SRCS} ${libqtmultimedia_UIS_H} ${libqtmultimedia_RCC_SRCS} ${libqtmultimedia_HDRS})
+ add_dependencies(qtmultimedia qmmp)
+ target_link_libraries(qtmultimedia ${QT_LIBRARIES} -lqmmp)
+ install(TARGETS qtmultimedia DESTINATION ${LIB_DIR}/qmmp/Output)
+ENDIF(${QT_QTMULTIMEDIA_FOUND}) \ No newline at end of file
diff --git a/src/plugins/Output/qtmultimedia/outputqtmultimedia.cpp b/src/plugins/Output/qtmultimedia/outputqtmultimedia.cpp
new file mode 100644
index 000000000..142292bdd
--- /dev/null
+++ b/src/plugins/Output/qtmultimedia/outputqtmultimedia.cpp
@@ -0,0 +1,136 @@
+/***************************************************************************
+ * Copyright (C) 2015 by Ivan Ponomarev *
+ * ivantrue@gmail.com *
+ * *
+ * This program 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 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program 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 this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#include "outputqtmultimedia.h"
+
+#include <QAudioOutput>
+#include <QAudioFormat>
+#include <QAudioDeviceInfo>
+#include <QBuffer>
+#include <QSettings>
+#include <QDebug>
+
+
+OutputQtMultimedia::OutputQtMultimedia() : Output(), m_buffer(NULL)
+{
+}
+
+OutputQtMultimedia::~OutputQtMultimedia()
+{
+}
+
+bool OutputQtMultimedia::initialize(quint32 freq, ChannelMap map, Qmmp::AudioFormat format)
+{
+ QAudioFormat qformat;
+ qformat.setCodec("audio/pcm");
+ qformat.setFrequency(freq);
+ qformat.setByteOrder(QAudioFormat::LittleEndian);
+ qformat.setChannels(map.size());
+ qformat.setSampleType(QAudioFormat::SignedInt);
+ switch (format)
+ {
+ case Qmmp::PCM_S8:
+ qformat.setSampleSize(8);
+ break;
+ case Qmmp::PCM_S16LE:
+ qformat.setSampleSize(16);
+ break;
+ case Qmmp::PCM_S24LE:
+ qformat.setSampleSize(24);
+ break;
+ case Qmmp::PCM_S32LE:
+ qformat.setSampleSize(32);
+ break;
+ default:
+ break;
+ }
+
+ if (!qformat.isValid())
+ return false;
+
+ const QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
+ const QString saved_device_name = settings.value("QTMULTIMEDIA/device").toString();
+
+ QAudioDeviceInfo device_info;
+ if (!saved_device_name.isEmpty())
+ {
+ const QList<QAudioDeviceInfo> devices = QAudioDeviceInfo::availableDevices(QAudio::AudioOutput);
+ foreach (const QAudioDeviceInfo &info, devices)
+ {
+ if (info.deviceName()==saved_device_name)
+ {
+ if (info.isFormatSupported(qformat))
+ {
+ device_info = info;
+ break;
+ }
+ else
+ qDebug() << "OutputQtMultimedia: Output device: " << saved_device_name << " is not supported";
+ }
+ }
+ }
+
+ if (device_info.isNull())
+ {
+ device_info = QAudioDeviceInfo::defaultOutputDevice();
+ if (!device_info.isFormatSupported(qformat))
+ return false;
+ }
+
+ qDebug() << "OutputQtMultimedia: Using output device: " << device_info.deviceName();
+
+ m_output.reset(new QAudioOutput(device_info, qformat));
+ m_buffer = m_output->start();
+
+ configure(freq, map, format);
+ return true;
+}
+
+
+qint64 OutputQtMultimedia::latency()
+{
+ return 0;
+}
+
+qint64 OutputQtMultimedia::writeAudio(unsigned char *data, qint64 maxSize)
+{
+ return m_buffer->write((const char*)data, maxSize);
+}
+
+void OutputQtMultimedia::drain()
+{
+ m_buffer->waitForBytesWritten(-1);
+}
+
+void OutputQtMultimedia::reset()
+{
+ m_buffer->reset();
+ m_buffer = m_output->start();
+}
+
+void OutputQtMultimedia::suspend()
+{
+ m_output->suspend();
+}
+
+void OutputQtMultimedia::resume()
+{
+ m_output->resume();
+}
diff --git a/src/plugins/Output/qtmultimedia/outputqtmultimedia.h b/src/plugins/Output/qtmultimedia/outputqtmultimedia.h
new file mode 100644
index 000000000..ab60ce290
--- /dev/null
+++ b/src/plugins/Output/qtmultimedia/outputqtmultimedia.h
@@ -0,0 +1,53 @@
+/***************************************************************************
+ * Copyright (C) 2015 by Ivan Ponomarev *
+ * ivantrue@gmail.com *
+ * *
+ * This program 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 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program 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 this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#ifndef OUTPUTQTMULTIMEDIA_H
+#define OUTPUTQTMULTIMEDIA_H
+
+#include <qmmp/output.h>
+#include <QScopedPointer>
+
+/**
+ @author Ivan Ponomarev ivantrue@gmail.com
+*/
+class QAudioOutput;
+class QIODevice;
+
+class OutputQtMultimedia : public Output
+{
+public:
+ OutputQtMultimedia();
+ ~OutputQtMultimedia();
+
+ virtual bool initialize(quint32, ChannelMap map, Qmmp::AudioFormat format);
+ virtual qint64 latency();
+ virtual qint64 writeAudio(unsigned char *data, qint64 maxSize);
+ virtual void drain();
+ virtual void reset();
+ virtual void suspend();
+ virtual void resume();
+
+private:
+ QScopedPointer<QAudioOutput> m_output;
+ QIODevice *m_buffer;
+};
+
+
+#endif // OUTPUTQTMULTIMEDIA_H
diff --git a/src/plugins/Output/qtmultimedia/outputqtmultimediafactory.cpp b/src/plugins/Output/qtmultimedia/outputqtmultimediafactory.cpp
new file mode 100644
index 000000000..93a698391
--- /dev/null
+++ b/src/plugins/Output/qtmultimedia/outputqtmultimediafactory.cpp
@@ -0,0 +1,70 @@
+/***************************************************************************
+ * Copyright (C) 2015 by Ivan Ponomarev *
+ * ivantrue@gmail.com *
+ * *
+ * This program 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 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program 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 this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#include "outputqtmultimediafactory.h"
+#include "settingsdialog.h"
+
+#include <QtGui>
+#include <qmmp/qmmp.h>
+#include "outputqtmultimedia.h"
+
+
+const OutputProperties OutputQtMultimediaFactory::properties() const
+{
+ OutputProperties properties;
+ properties.name = tr("Qt Multimedia Plugin");
+ properties.hasAbout = true;
+ properties.hasSettings = true;
+ properties.shortName = "qtmultimedia";
+ return properties;
+}
+
+Output* OutputQtMultimediaFactory::create()
+{
+ return new OutputQtMultimedia();
+}
+
+Volume *OutputQtMultimediaFactory::createVolume()
+{
+ return 0;
+}
+
+void OutputQtMultimediaFactory::showSettings(QWidget* parent)
+{
+ SettingsDialog *s = new SettingsDialog(parent);
+ s->show();
+}
+
+void OutputQtMultimediaFactory::showAbout(QWidget *parent)
+{
+ QMessageBox::about (parent, tr("About Qt Multimedia Output Plugin"),
+ tr("Qmmp Qt Multimedia Output Plugin")+"\n"+
+ tr("Written by: Ivan Ponomarev <ivantrue@gmail.com>"));
+}
+
+QTranslator *OutputQtMultimediaFactory::createTranslator(QObject *parent)
+{
+ QTranslator *translator = new QTranslator(parent);
+ QString locale = Qmmp::systemLanguageID();
+ translator->load(QString(":/qtmultimedia_plugin_") + locale);
+ return translator;
+}
+
+Q_EXPORT_PLUGIN2(qtmultimedia, OutputQtMultimediaFactory)
diff --git a/src/plugins/Output/qtmultimedia/outputqtmultimediafactory.h b/src/plugins/Output/qtmultimedia/outputqtmultimediafactory.h
new file mode 100644
index 000000000..d8ccbf97c
--- /dev/null
+++ b/src/plugins/Output/qtmultimedia/outputqtmultimediafactory.h
@@ -0,0 +1,47 @@
+/***************************************************************************
+ * Copyright (C) 2015 by Ivan Ponomarev *
+ * ivantrue@gmail.com *
+ * *
+ * This program 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 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program 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 this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+#ifndef OUTPUTQTMULTIMEDIAFACTORY_H
+#define OUTPUTQTMULTIMEDIAFACTORY_H
+
+
+#include <QObject>
+#include <QString>
+#include <QIODevice>
+#include <QWidget>
+
+#include <qmmp/output.h>
+#include <qmmp/outputfactory.h>
+
+
+class OutputQtMultimediaFactory : public QObject, OutputFactory
+{
+Q_OBJECT
+Q_INTERFACES(OutputFactory)
+
+public:
+ virtual const OutputProperties properties() const;
+ virtual Output* create();
+ virtual Volume *createVolume();
+ virtual void showSettings(QWidget* parent);
+ virtual void showAbout(QWidget *parent);
+ virtual QTranslator *createTranslator(QObject *parent);
+};
+
+#endif
diff --git a/src/plugins/Output/qtmultimedia/qtmultimedia.pro b/src/plugins/Output/qtmultimedia/qtmultimedia.pro
new file mode 100644
index 000000000..f9e92d75d
--- /dev/null
+++ b/src/plugins/Output/qtmultimedia/qtmultimedia.pro
@@ -0,0 +1,42 @@
+include(../../plugins.pri)
+
+QT += multimedia
+
+FORMS += settingsdialog.ui
+
+HEADERS += outputqtmultimediafactory.h \
+ outputqtmultimedia.h \
+ settingsdialog.h
+
+SOURCES += outputqtmultimediafactory.cpp \
+ outputqtmultimedia.cpp \
+ settingsdialog.cpp
+
+TARGET=$$PLUGINS_PREFIX/Output/qtmultimedia
+
+INCLUDEPATH += ../../../
+QMAKE_LIBDIR += ../../../../lib
+
+CONFIG += warn_on \
+thread \
+plugin
+
+TEMPLATE = lib
+
+RESOURCES = translations/translations.qrc
+
+unix {
+ isEmpty (LIB_DIR){
+ LIB_DIR = /lib
+ }
+
+ target.path = $$LIB_DIR/qmmp/Output
+ INSTALLS += target
+ LIBS += -lqmmp
+ QMAKE_CLEAN =$$PLUGINS_PREFIX/Output/libqtmultimedia.so
+}
+
+win32 {
+ LIBS += -lqmmp0
+ QMAKE_LIBDIR += ../../../../bin
+}
diff --git a/src/plugins/Output/qtmultimedia/settingsdialog.cpp b/src/plugins/Output/qtmultimedia/settingsdialog.cpp
new file mode 100644
index 000000000..7b4fd0600
--- /dev/null
+++ b/src/plugins/Output/qtmultimedia/settingsdialog.cpp
@@ -0,0 +1,62 @@
+/***************************************************************************
+ * Copyright (C) 2015 by Ivan Ponomarev *
+ * ivantrue@gmail.com *
+ * *
+ * This program 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 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program 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 this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+#include <QSettings>
+#include <QAudioDeviceInfo>
+#include <QDebug>
+#include <qmmp/qmmp.h>
+
+#include "settingsdialog.h"
+
+SettingsDialog::SettingsDialog (QWidget *parent) : QDialog (parent)
+{
+ ui.setupUi(this);
+ setAttribute(Qt::WA_DeleteOnClose);
+
+ const QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
+ const QString default_device = settings.value("QTMULTIMEDIA/device").toString();
+
+ //Default item always has index = 0
+ ui.deviceComboBox->addItem(tr("Default"));
+ ui.deviceComboBox->setCurrentIndex(0);
+
+ const QList<QAudioDeviceInfo> devices = QAudioDeviceInfo::availableDevices(QAudio::AudioOutput);
+ int index = 1;
+ foreach (const QAudioDeviceInfo &info, devices)
+ {
+ const QString device_name = info.deviceName();
+ ui.deviceComboBox->addItem(device_name);
+ if (device_name==default_device)
+ ui.deviceComboBox->setCurrentIndex(index);
+ ++index;
+ }
+}
+
+SettingsDialog::~SettingsDialog()
+{
+}
+
+void SettingsDialog::accept()
+{
+ qDebug("%s", Q_FUNC_INFO);
+ QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
+ //0 index means default value, we save empty string for it.
+ settings.setValue("QTMULTIMEDIA/device", ui.deviceComboBox->currentIndex() ? ui.deviceComboBox->currentText() : QString());
+ QDialog::accept();
+}
diff --git a/src/plugins/Output/qtmultimedia/settingsdialog.h b/src/plugins/Output/qtmultimedia/settingsdialog.h
new file mode 100644
index 000000000..19fc13386
--- /dev/null
+++ b/src/plugins/Output/qtmultimedia/settingsdialog.h
@@ -0,0 +1,41 @@
+/***************************************************************************
+ * Copyright (C) 2015 by Ivan Ponomarev *
+ * ivantrue@gmail.com *
+ * *
+ * This program 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 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program 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 this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+#ifndef SETTINGSDIALOG_H
+#define SETTINGSDIALOG_H
+
+#include <QDialog>
+#include "ui_settingsdialog.h"
+
+/**
+ @author Ivan Ponomarev <ivantrue@gmail.com>
+*/
+class SettingsDialog : public QDialog
+{
+Q_OBJECT
+public:
+ SettingsDialog(QWidget *parent);
+ ~SettingsDialog();
+
+private:
+ virtual void accept();
+ Ui::SettingsDialog ui;
+};
+
+#endif
diff --git a/src/plugins/Output/qtmultimedia/settingsdialog.ui b/src/plugins/Output/qtmultimedia/settingsdialog.ui
new file mode 100644
index 000000000..582b86511
--- /dev/null
+++ b/src/plugins/Output/qtmultimedia/settingsdialog.ui
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>SettingsDialog</class>
+ <widget class="QDialog" name="SettingsDialog">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>276</width>
+ <height>86</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Qt Multimedia Plugin Settings</string>
+ </property>
+ <layout class="QGridLayout">
+ <item row="0" column="1" colspan="2">
+ <widget class="QComboBox" name="deviceComboBox">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="editable">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0" colspan="3">
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Device:</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>accepted()</signal>
+ <receiver>SettingsDialog</receiver>
+ <slot>accept()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>179</x>
+ <y>51</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>274</x>
+ <y>2</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>rejected()</signal>
+ <receiver>SettingsDialog</receiver>
+ <slot>reject()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>231</x>
+ <y>46</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>271</x>
+ <y>44</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/src/plugins/Output/qtmultimedia/translations/qtmultimedia_plugin_en.ts b/src/plugins/Output/qtmultimedia/translations/qtmultimedia_plugin_en.ts
new file mode 100644
index 000000000..728e9cfb1
--- /dev/null
+++ b/src/plugins/Output/qtmultimedia/translations/qtmultimedia_plugin_en.ts
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="en_US">
+<context>
+ <name>OutputQtMultimediaFactory</name>
+ <message>
+ <location filename="../outputqtmultimediafactory.cpp" line="32"/>
+ <source>Qt Multimedia Plugin</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../outputqtmultimediafactory.cpp" line="57"/>
+ <source>About Qt Multimedia Output Plugin</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../outputqtmultimediafactory.cpp" line="58"/>
+ <source>Qmmp Qt Multimedia Output Plugin</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../outputqtmultimediafactory.cpp" line="59"/>
+ <source>Written by: Ivan Ponomarev &lt;ivantrue@gmail.com&gt;</source>
+ <translation></translation>
+ </message>
+</context>
+<context>
+ <name>SettingsDialog</name>
+ <message>
+ <location filename="../settingsdialog.ui" line="14"/>
+ <source>Qt Multimedia Plugin Settings</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="46"/>
+ <source>Device:</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.cpp" line="36"/>
+ <source>Default</source>
+ <translation></translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/Output/qtmultimedia/translations/qtmultimedia_plugin_ru.ts b/src/plugins/Output/qtmultimedia/translations/qtmultimedia_plugin_ru.ts
new file mode 100644
index 000000000..bbee87585
--- /dev/null
+++ b/src/plugins/Output/qtmultimedia/translations/qtmultimedia_plugin_ru.ts
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="ru_RU">
+<context>
+ <name>OutputQtMultimediaFactory</name>
+ <message>
+ <location filename="../outputqtmultimediafactory.cpp" line="32"/>
+ <source>Qt Multimedia Plugin</source>
+ <translation>Модуль Qt Multimedia</translation>
+ </message>
+ <message>
+ <location filename="../outputqtmultimediafactory.cpp" line="57"/>
+ <source>About Qt Multimedia Output Plugin</source>
+ <translation>О модуле вывода Qt Multimedia</translation>
+ </message>
+ <message>
+ <location filename="../outputqtmultimediafactory.cpp" line="58"/>
+ <source>Qmmp Qt Multimedia Output Plugin</source>
+ <translation>Модуль вывода Qt Multimedia для Qmmp</translation>
+ </message>
+ <message>
+ <location filename="../outputqtmultimediafactory.cpp" line="59"/>
+ <source>Written by: Ivan Ponomarev &lt;ivantrue@gmail.com&gt;</source>
+ <translation>Разработчик: Иван Пономарев &lt;ivantrue@gmail.com&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>SettingsDialog</name>
+ <message>
+ <location filename="../settingsdialog.ui" line="14"/>
+ <source>Qt Multimedia Plugin Settings</source>
+ <translation>Настройки модуля Qt Multimedia</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="46"/>
+ <source>Device:</source>
+ <translation>Устройство:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.cpp" line="36"/>
+ <source>Default</source>
+ <translation>По умолчанию</translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/Output/qtmultimedia/translations/translations.qrc b/src/plugins/Output/qtmultimedia/translations/translations.qrc
new file mode 100644
index 000000000..f6d2dbb40
--- /dev/null
+++ b/src/plugins/Output/qtmultimedia/translations/translations.qrc
@@ -0,0 +1,6 @@
+<RCC>
+ <qresource prefix="/">
+ <file>qtmultimedia_plugin_en.qm</file>
+ <file>qtmultimedia_plugin_ru.qm</file>
+ </qresource>
+</RCC>