diff options
author | Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com> | 2012-05-18 10:26:51 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-05-18 05:28:35 +0200 |
commit | 63db99a8ee1fa6430cf5f6ab3406323bd7c14850 (patch) | |
tree | 90a7e37191ad4de209a5156bdbe60896768c3963 | |
parent | f965f683d09eebcf5d1d0e8403db402551ac7c50 (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.cpp | 175 | ||||
-rw-r--r-- | src/multimedia/recording/qmediaencodersettings.h | 16 | ||||
-rw-r--r-- | tests/auto/unit/qcamera/tst_qcamera.cpp | 23 | ||||
-rw-r--r-- | tests/auto/unit/qmediarecorder/tst_qmediarecorder.cpp | 46 |
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() |