summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmytro Poplavskiy <dmytro.poplavskiy@nokia.com>2012-05-18 10:26:51 +1000
committerQt by Nokia <qt-info@nokia.com>2012-05-18 05:28:35 +0200
commit63db99a8ee1fa6430cf5f6ab3406323bd7c14850 (patch)
tree90a7e37191ad4de209a5156bdbe60896768c3963
parentf965f683d09eebcf5d1d0e8403db402551ac7c50 (diff)
Added custom parameters to Audio/Video/ImageEncodingSettings
This allows to specify more advanced and system/codec specific settings Change-Id: Ia0a2e94eaf56df285a219018e0beab895a2e7c2a Reviewed-by: Ling Hu <ling.hu@nokia.com>
-rw-r--r--src/multimedia/recording/qmediaencodersettings.cpp175
-rw-r--r--src/multimedia/recording/qmediaencodersettings.h16
-rw-r--r--tests/auto/unit/qcamera/tst_qcamera.cpp23
-rw-r--r--tests/auto/unit/qmediarecorder/tst_qmediarecorder.cpp46
4 files changed, 254 insertions, 6 deletions
diff --git a/src/multimedia/recording/qmediaencodersettings.cpp b/src/multimedia/recording/qmediaencodersettings.cpp
index 309ddef9b..edb72b511 100644
--- a/src/multimedia/recording/qmediaencodersettings.cpp
+++ b/src/multimedia/recording/qmediaencodersettings.cpp
@@ -78,7 +78,8 @@ public:
bitrate(other.bitrate),
sampleRate(other.sampleRate),
channels(other.channels),
- quality(other.quality)
+ quality(other.quality),
+ encodingOptions(other.encodingOptions)
{
}
@@ -89,6 +90,7 @@ public:
int sampleRate;
int channels;
QtMultimedia::EncodingQuality quality;
+ QVariantMap encodingOptions;
private:
QAudioEncoderSettingsPrivate& operator=(const QAudioEncoderSettingsPrivate &other);
@@ -166,7 +168,8 @@ bool QAudioEncoderSettings::operator==(const QAudioEncoderSettings &other) const
d->sampleRate == other.d->sampleRate &&
d->channels == other.d->channels &&
d->quality == other.d->quality &&
- d->codec == other.d->codec);
+ d->codec == other.d->codec &&
+ d->encodingOptions == other.d->encodingOptions);
}
/*!
@@ -318,6 +321,57 @@ void QAudioEncoderSettings::setQuality(QtMultimedia::EncodingQuality quality)
d->quality = quality;
}
+/*!
+ Returns the value of encoding \a option.
+
+ \sa setEncodingOption(), encodingOptions()
+*/
+QVariant QAudioEncoderSettings::encodingOption(const QString &option) const
+{
+ return d->encodingOptions.value(option);
+}
+
+/*!
+ Returns the all the encoding options as QVariantMap.
+
+ \sa encodingOption(), setEncodingOptions()
+*/
+QVariantMap QAudioEncoderSettings::encodingOptions() const
+{
+ return d->encodingOptions;
+}
+
+/*!
+ Set the encoding \a option \a value.
+
+ The supported set and meaning of encoding options are
+ system and selected codec specific.
+
+ \sa encodingOption(), setEncodingOptions()
+*/
+void QAudioEncoderSettings::setEncodingOption(const QString &option, const QVariant &value)
+{
+ d->isNull = false;
+ if (value.isNull())
+ d->encodingOptions.remove(option);
+ else
+ d->encodingOptions.insert(option, value);
+}
+
+/*!
+ Replace all the \a encoding options.
+
+ The supported set and meaning of encoding options are
+ system and selected codec specific.
+
+ \sa encodingOption(), setEncodingOptions()
+*/
+void QAudioEncoderSettings::setEncodingOptions(const QVariantMap &options)
+{
+ d->isNull = false;
+ d->encodingOptions = options;
+}
+
class QVideoEncoderSettingsPrivate : public QSharedData
{
public:
@@ -338,7 +392,8 @@ public:
bitrate(other.bitrate),
resolution(other.resolution),
frameRate(other.frameRate),
- quality(other.quality)
+ quality(other.quality),
+ encodingOptions(other.encodingOptions)
{
}
@@ -349,6 +404,7 @@ public:
QSize resolution;
qreal frameRate;
QtMultimedia::EncodingQuality quality;
+ QVariantMap encodingOptions;
private:
QVideoEncoderSettingsPrivate& operator=(const QVideoEncoderSettingsPrivate &other);
@@ -420,7 +476,8 @@ bool QVideoEncoderSettings::operator==(const QVideoEncoderSettings &other) const
d->quality == other.d->quality &&
d->codec == other.d->codec &&
d->resolution == other.d->resolution &&
- qFuzzyCompare(d->frameRate, other.d->frameRate));
+ qFuzzyCompare(d->frameRate, other.d->frameRate) &&
+ d->encodingOptions == other.d->encodingOptions);
}
/*!
@@ -592,6 +649,56 @@ void QVideoEncoderSettings::setQuality(QtMultimedia::EncodingQuality quality)
d->quality = quality;
}
+/*!
+ Returns the value of encoding \a option.
+
+ \sa setEncodingOption(), encodingOptions()
+*/
+QVariant QVideoEncoderSettings::encodingOption(const QString &option) const
+{
+ return d->encodingOptions.value(option);
+}
+
+/*!
+ Returns the all the encoding options as QVariantMap.
+
+ \sa encodingOption(), setEncodingOptions()
+*/
+QVariantMap QVideoEncoderSettings::encodingOptions() const
+{
+ return d->encodingOptions;
+}
+
+/*!
+ Set the encoding \a option \a value.
+
+ The supported set and meaning of encoding options are
+ system and selected codec specific.
+
+ \sa encodingOption(), setEncodingOptions()
+*/
+void QVideoEncoderSettings::setEncodingOption(const QString &option, const QVariant &value)
+{
+ d->isNull = false;
+ if (value.isNull())
+ d->encodingOptions.remove(option);
+ else
+ d->encodingOptions.insert(option, value);
+}
+
+/*!
+ Replace all the \a encoding options.
+
+ The supported set and meaning of encoding options are
+ system and selected codec specific.
+
+ \sa encodingOption(), setEncodingOptions()
+*/
+void QVideoEncoderSettings::setEncodingOptions(const QVariantMap &options)
+{
+ d->isNull = false;
+ d->encodingOptions = options;
+}
class QImageEncoderSettingsPrivate : public QSharedData
@@ -608,7 +715,8 @@ public:
isNull(other.isNull),
codec(other.codec),
resolution(other.resolution),
- quality(other.quality)
+ quality(other.quality),
+ encodingOptions(other.encodingOptions)
{
}
@@ -616,6 +724,7 @@ public:
QString codec;
QSize resolution;
QtMultimedia::EncodingQuality quality;
+ QVariantMap encodingOptions;
private:
QImageEncoderSettingsPrivate& operator=(const QImageEncoderSettingsPrivate &other);
@@ -687,7 +796,8 @@ bool QImageEncoderSettings::operator==(const QImageEncoderSettings &other) const
(d->isNull == other.d->isNull &&
d->quality == other.d->quality &&
d->codec == other.d->codec &&
- d->resolution == other.d->resolution);
+ d->resolution == other.d->resolution &&
+ d->encodingOptions == other.d->encodingOptions);
}
@@ -783,5 +893,58 @@ void QImageEncoderSettings::setQuality(QtMultimedia::EncodingQuality quality)
d->isNull = false;
d->quality = quality;
}
+
+/*!
+ Returns the value of encoding \a option.
+
+ \sa setEncodingOption(), encodingOptions()
+*/
+QVariant QImageEncoderSettings::encodingOption(const QString &option) const
+{
+ return d->encodingOptions.value(option);
+}
+
+/*!
+ Returns the all the encoding options as QVariantMap.
+
+ \sa encodingOption(), setEncodingOptions()
+*/
+QVariantMap QImageEncoderSettings::encodingOptions() const
+{
+ return d->encodingOptions;
+}
+
+/*!
+ Set the encoding \a option \a value.
+
+ The supported set and meaning of encoding options are
+ system and selected codec specific.
+
+ \sa encodingOption(), setEncodingOptions()
+*/
+void QImageEncoderSettings::setEncodingOption(const QString &option, const QVariant &value)
+{
+ d->isNull = false;
+ if (value.isNull())
+ d->encodingOptions.remove(option);
+ else
+ d->encodingOptions.insert(option, value);
+}
+
+/*!
+ Replace all the \a encoding options.
+
+ The supported set and meaning of encoding options are
+ system and selected codec specific.
+
+ \sa encodingOption(), setEncodingOptions()
+*/
+void QImageEncoderSettings::setEncodingOptions(const QVariantMap &options)
+{
+ d->isNull = false;
+ d->encodingOptions = options;
+}
+
+
QT_END_NAMESPACE
diff --git a/src/multimedia/recording/qmediaencodersettings.h b/src/multimedia/recording/qmediaencodersettings.h
index c2f2f1dd8..c7448fee3 100644
--- a/src/multimedia/recording/qmediaencodersettings.h
+++ b/src/multimedia/recording/qmediaencodersettings.h
@@ -45,6 +45,7 @@
#include <QtCore/qsharedpointer.h>
#include <QtCore/qstring.h>
#include <QtCore/qsize.h>
+#include <QtCore/qvariant.h>
#include <qtmultimediadefs.h>
#include "qtmedianamespace.h"
@@ -89,6 +90,11 @@ public:
QtMultimedia::EncodingQuality quality() const;
void setQuality(QtMultimedia::EncodingQuality quality);
+ QVariant encodingOption(const QString &option) const;
+ QVariantMap encodingOptions() const;
+ void setEncodingOption(const QString &option, const QVariant &value);
+ void setEncodingOptions(const QVariantMap &options);
+
private:
QSharedDataPointer<QAudioEncoderSettingsPrivate> d;
};
@@ -127,6 +133,11 @@ public:
QtMultimedia::EncodingQuality quality() const;
void setQuality(QtMultimedia::EncodingQuality quality);
+ QVariant encodingOption(const QString &option) const;
+ QVariantMap encodingOptions() const;
+ void setEncodingOption(const QString &option, const QVariant &value);
+ void setEncodingOptions(const QVariantMap &options);
+
private:
QSharedDataPointer<QVideoEncoderSettingsPrivate> d;
};
@@ -156,6 +167,11 @@ public:
QtMultimedia::EncodingQuality quality() const;
void setQuality(QtMultimedia::EncodingQuality quality);
+ QVariant encodingOption(const QString &option) const;
+ QVariantMap encodingOptions() const;
+ void setEncodingOption(const QString &option, const QVariant &value);
+ void setEncodingOptions(const QVariantMap &options);
+
private:
QSharedDataPointer<QImageEncoderSettingsPrivate> d;
};
diff --git a/tests/auto/unit/qcamera/tst_qcamera.cpp b/tests/auto/unit/qcamera/tst_qcamera.cpp
index 838041db3..42bc69ec7 100644
--- a/tests/auto/unit/qcamera/tst_qcamera.cpp
+++ b/tests/auto/unit/qcamera/tst_qcamera.cpp
@@ -792,10 +792,25 @@ void tst_QCamera::testImageSettings()
QVERIFY(!settings.isNull());
settings = QImageEncoderSettings();
+ settings.setEncodingOption(QLatin1Literal("encoderOption"), QVariant(1));
+ QCOMPARE(settings.encodingOption(QLatin1Literal("encoderOption")), QVariant(1));
+ QVariantMap options;
+ options.insert(QLatin1Literal("encoderOption"), QVariant(1));
+ QCOMPARE(settings.encodingOptions(), options);
+ options.insert(QLatin1Literal("encoderOption2"), QVariant(2));
+ options.remove(QLatin1Literal("encoderOption"));
+ settings.setEncodingOptions(options);
+ QCOMPARE(settings.encodingOption(QLatin1Literal("encoderOption")), QVariant());
+ QCOMPARE(settings.encodingOption(QLatin1Literal("encoderOption2")), QVariant(2));
+ QVERIFY(!settings.isNull());
+ QVERIFY(settings != QImageEncoderSettings());
+
+ settings = QImageEncoderSettings();
QVERIFY(settings.isNull());
QCOMPARE(settings.codec(), QString());
QCOMPARE(settings.quality(), QtMultimedia::NormalQuality);
QCOMPARE(settings.resolution(), QSize());
+ QVERIFY(settings.encodingOptions().isEmpty());
{
QImageEncoderSettings settings1;
@@ -855,6 +870,14 @@ void tst_QCamera::testImageSettings()
QVERIFY(settings1 == settings2);
settings2.setQuality(QtMultimedia::LowQuality);
QVERIFY(settings1 != settings2);
+
+ settings1 = QImageEncoderSettings();
+ settings1.setEncodingOption(QLatin1Literal("encoderOption"), QVariant(1));
+ settings2 = QImageEncoderSettings();
+ settings2.setEncodingOption(QLatin1Literal("encoderOption"), QVariant(1));
+ QVERIFY(settings1 == settings2);
+ settings2.setEncodingOption(QLatin1Literal("encoderOption"), QVariant(2));
+ QVERIFY(settings1 != settings2);
}
void tst_QCamera::testCameraLock()
diff --git a/tests/auto/unit/qmediarecorder/tst_qmediarecorder.cpp b/tests/auto/unit/qmediarecorder/tst_qmediarecorder.cpp
index aad7b873d..bb5c8b525 100644
--- a/tests/auto/unit/qmediarecorder/tst_qmediarecorder.cpp
+++ b/tests/auto/unit/qmediarecorder/tst_qmediarecorder.cpp
@@ -516,11 +516,26 @@ void tst_QMediaRecorder::testAudioSettings()
QVERIFY(!settings.isNull());
settings = QAudioEncoderSettings();
+ settings.setEncodingOption(QLatin1Literal("encoderOption"), QVariant(1));
+ QCOMPARE(settings.encodingOption(QLatin1Literal("encoderOption")), QVariant(1));
+ QVariantMap options;
+ options.insert(QLatin1Literal("encoderOption"), QVariant(1));
+ QCOMPARE(settings.encodingOptions(), options);
+ options.insert(QLatin1Literal("encoderOption2"), QVariant(2));
+ options.remove(QLatin1Literal("encoderOption"));
+ settings.setEncodingOptions(options);
+ QCOMPARE(settings.encodingOption(QLatin1Literal("encoderOption")), QVariant());
+ QCOMPARE(settings.encodingOption(QLatin1Literal("encoderOption2")), QVariant(2));
+ QVERIFY(!settings.isNull());
+ QVERIFY(settings != QAudioEncoderSettings());
+
+ settings = QAudioEncoderSettings();
QVERIFY(settings.isNull());
QCOMPARE(settings.codec(), QString());
QCOMPARE(settings.bitRate(), -1);
QCOMPARE(settings.quality(), QtMultimedia::NormalQuality);
QCOMPARE(settings.sampleRate(), -1);
+ QVERIFY(settings.encodingOptions().isEmpty());
{
QAudioEncoderSettings settings1;
@@ -601,6 +616,14 @@ void tst_QMediaRecorder::testAudioSettings()
QVERIFY(settings1 == settings2);
settings2.setSampleRate(2);
QVERIFY(settings1 != settings2);
+
+ settings1 = QAudioEncoderSettings();
+ settings1.setEncodingOption(QLatin1Literal("encoderOption"), QVariant(1));
+ settings2 = QAudioEncoderSettings();
+ settings2.setEncodingOption(QLatin1Literal("encoderOption"), QVariant(1));
+ QVERIFY(settings1 == settings2);
+ settings2.setEncodingOption(QLatin1Literal("encoderOption"), QVariant(2));
+ QVERIFY(settings1 != settings2);
}
void tst_QMediaRecorder::testVideoSettings()
@@ -644,12 +667,27 @@ void tst_QMediaRecorder::testVideoSettings()
QVERIFY(!settings.isNull());
settings = QVideoEncoderSettings();
+ settings.setEncodingOption(QLatin1Literal("encoderOption"), QVariant(1));
+ QCOMPARE(settings.encodingOption(QLatin1Literal("encoderOption")), QVariant(1));
+ QVariantMap options;
+ options.insert(QLatin1Literal("encoderOption"), QVariant(1));
+ QCOMPARE(settings.encodingOptions(), options);
+ options.insert(QLatin1Literal("encoderOption2"), QVariant(2));
+ options.remove(QLatin1Literal("encoderOption"));
+ settings.setEncodingOptions(options);
+ QCOMPARE(settings.encodingOption(QLatin1Literal("encoderOption")), QVariant());
+ QCOMPARE(settings.encodingOption(QLatin1Literal("encoderOption2")), QVariant(2));
+ QVERIFY(!settings.isNull());
+ QVERIFY(settings != QVideoEncoderSettings());
+
+ settings = QVideoEncoderSettings();
QVERIFY(settings.isNull());
QCOMPARE(settings.codec(), QString());
QCOMPARE(settings.bitRate(), -1);
QCOMPARE(settings.quality(), QtMultimedia::NormalQuality);
QCOMPARE(settings.frameRate(), qreal());
QCOMPARE(settings.resolution(), QSize());
+ QVERIFY(settings.encodingOptions().isEmpty());
{
QVideoEncoderSettings settings1;
@@ -730,6 +768,14 @@ void tst_QMediaRecorder::testVideoSettings()
QVERIFY(settings1 == settings2);
settings2.setFrameRate(2);
QVERIFY(settings1 != settings2);
+
+ settings1 = QVideoEncoderSettings();
+ settings1.setEncodingOption(QLatin1Literal("encoderOption"), QVariant(1));
+ settings2 = QVideoEncoderSettings();
+ settings2.setEncodingOption(QLatin1Literal("encoderOption"), QVariant(1));
+ QVERIFY(settings1 == settings2);
+ settings2.setEncodingOption(QLatin1Literal("encoderOption"), QVariant(2));
+ QVERIFY(settings1 != settings2);
}
void tst_QMediaRecorder::testSettingsApplied()