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>
This commit is contained in:
Dmytro Poplavskiy
2012-05-18 10:26:51 +10:00
committed by Qt by Nokia
parent f965f683d0
commit 63db99a8ee
4 changed files with 254 additions and 6 deletions

View File

@@ -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

View File

@@ -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;
};

View File

@@ -791,11 +791,26 @@ void tst_QCamera::testImageSettings()
QCOMPARE(settings.resolution(), QSize(800,600));
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()

View File

@@ -515,12 +515,27 @@ void tst_QMediaRecorder::testAudioSettings()
QCOMPARE(settings.channelCount(), 2);
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()
@@ -643,6 +666,20 @@ void tst_QMediaRecorder::testVideoSettings()
QCOMPARE(settings.resolution(), QSize(800,600));
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());
@@ -650,6 +687,7 @@ void tst_QMediaRecorder::testVideoSettings()
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()