summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew den Exter <andrew.den.exter@jollamobile.com>2014-03-04 18:03:20 +1000
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-03-06 02:36:46 +0100
commitcf68c9d02c85f5428436b8e756d4279ef93b9ca1 (patch)
tree9c57dbde81526ee6988b4fc0cb10c1a732942eca
parent0e280e78e2fe0f0417ca284f6b0d7a536a970bfd (diff)
GStreamer: Remove tags when an invalid QVariant is assigned.
Clear the tag list before syncing with reference set so old values are removed and explicitly remove invalid QVariants from the reference set so that the type correction doesn't result in invalid values being written instead. Change-Id: I7d1bdc95cd2a2d601720db84c9b3ef629477bc99 Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinmetadata.cpp21
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinsession.cpp2
2 files changed, 15 insertions, 8 deletions
diff --git a/src/plugins/gstreamer/camerabin/camerabinmetadata.cpp b/src/plugins/gstreamer/camerabin/camerabinmetadata.cpp
index b265fc2aa..c2b7c33c3 100644
--- a/src/plugins/gstreamer/camerabin/camerabinmetadata.cpp
+++ b/src/plugins/gstreamer/camerabin/camerabinmetadata.cpp
@@ -198,11 +198,13 @@ QVariant CameraBinMetaData::metaData(const QString &key) const
void CameraBinMetaData::setMetaData(const QString &key, const QVariant &value)
{
QVariant correctedValue = value;
- if (key == QMediaMetaData::Orientation) {
- correctedValue = toGStreamerOrientation(value);
- } else if (key == QMediaMetaData::GPSSpeed) {
- // kilometers per hour to meters per second.
- correctedValue = (value.toDouble() * 1000) / 3600;
+ if (value.isValid()) {
+ if (key == QMediaMetaData::Orientation) {
+ correctedValue = toGStreamerOrientation(value);
+ } else if (key == QMediaMetaData::GPSSpeed) {
+ // kilometers per hour to meters per second.
+ correctedValue = (value.toDouble() * 1000) / 3600;
+ }
}
static const int count = sizeof(qt_gstreamerMetaDataKeys) / sizeof(QGstreamerMetaDataKeyLookup);
@@ -211,9 +213,12 @@ void CameraBinMetaData::setMetaData(const QString &key, const QVariant &value)
if (qt_gstreamerMetaDataKeys[i].key == key) {
const char *name = qt_gstreamerMetaDataKeys[i].token;
- correctedValue.convert(qt_gstreamerMetaDataKeys[i].type);
-
- m_values.insert(QByteArray::fromRawData(name, qstrlen(name)), correctedValue);
+ if (correctedValue.isValid()) {
+ correctedValue.convert(qt_gstreamerMetaDataKeys[i].type);
+ m_values.insert(QByteArray::fromRawData(name, qstrlen(name)), correctedValue);
+ } else {
+ m_values.remove(QByteArray::fromRawData(name, qstrlen(name)));
+ }
emit QMetaDataWriterControl::metaDataChanged();
emit metaDataChanged(m_values);
diff --git a/src/plugins/gstreamer/camerabin/camerabinsession.cpp b/src/plugins/gstreamer/camerabin/camerabinsession.cpp
index 28e237776..8ca6bfd83 100644
--- a/src/plugins/gstreamer/camerabin/camerabinsession.cpp
+++ b/src/plugins/gstreamer/camerabin/camerabinsession.cpp
@@ -756,6 +756,8 @@ void CameraBinSession::setMetaData(const QMap<QByteArray, QVariant> &data)
GstIterator *elements = gst_bin_iterate_all_by_interface(GST_BIN(m_camerabin), GST_TYPE_TAG_SETTER);
GstElement *element = 0;
while (gst_iterator_next(elements, (void**)&element) == GST_ITERATOR_OK) {
+ gst_tag_setter_reset_tags(GST_TAG_SETTER(element));
+
QMapIterator<QByteArray, QVariant> it(data);
while (it.hasNext()) {
it.next();