Skip to content

Commit

Permalink
GStreamer: Remove tags when an invalid QVariant is assigned.
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
adenexter committed Mar 10, 2014
1 parent 07ae846 commit 56f0a8b
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 8 deletions.
21 changes: 13 additions & 8 deletions qtmultimedia/src/plugins/gstreamer/camerabin/camerabinmetadata.cpp
Expand Up @@ -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);
Expand All @@ -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);
Expand Down
Expand Up @@ -777,6 +777,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();
Expand Down

0 comments on commit 56f0a8b

Please sign in to comment.