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:
committed by
Qt by Nokia
parent
f965f683d0
commit
63db99a8ee
@@ -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
|
||||
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user