QVariant QGstreamerCaptureMetaDataControl::metaData(const QString &key) const { QGstreamerMetaDataKeyLookup::const_iterator it = qt_gstreamerMetaDataKeys()->find(key); if (it != qt_gstreamerMetaDataKeys()->constEnd()) return m_values.value(it.value()); return QVariant(); }
void QGstreamerCaptureMetaDataControl::setMetaData(const QString &key, const QVariant &value) { QGstreamerMetaDataKeyLookup::const_iterator it = qt_gstreamerMetaDataKeys()->find(key); if (it != qt_gstreamerMetaDataKeys()->constEnd()) { m_values.insert(it.value(), value); emit QMetaDataWriterControl::metaDataChanged(); emit QMetaDataWriterControl::metaDataChanged(key, value); emit metaDataChanged(m_values); } }
QStringList CameraBinMetaData::availableMetaData() const { static QMap<QByteArray, QString> keysMap; if (keysMap.isEmpty()) { Q_FOREACH (const QGStreamerMetaDataKey &metadataKey, *qt_gstreamerMetaDataKeys()) keysMap[QByteArray(metadataKey.gstName)] = metadataKey.qtName; }
void QGstreamerMetaDataProvider::updateTags() { QVariantMap oldTags = m_tags; m_tags.clear(); bool changed = false; QMapIterator<QByteArray ,QVariant> i(m_session->tags()); while (i.hasNext()) { i.next(); //use gstreamer native keys for elements not in our key map QString key = qt_gstreamerMetaDataKeys()->value(i.key(), i.key()); m_tags.insert(key, i.value()); if (i.value() != oldTags.value(key)) { changed = true; emit metaDataChanged(key, i.value()); } } if (oldTags.isEmpty() != m_tags.isEmpty()) { emit metaDataAvailableChanged(isMetaDataAvailable()); changed = true; } if (changed) emit metaDataChanged(); }
QStringList QGstreamerCaptureMetaDataControl::availableMetaData() const { QStringList res; foreach (const QByteArray &key, m_values.keys()) { QString tag = qt_gstreamerMetaDataKeys()->key(key); if (!tag.isEmpty()) res.append(tag); } return res; }
QVariant CameraBinMetaData::metaData(const QString &key) const { if (key == QMediaMetaData::Orientation) { return fromGStreamerOrientation(m_values.value(QByteArray(GST_TAG_IMAGE_ORIENTATION))); } else if (key == QMediaMetaData::GPSSpeed) { const double metersPerSec = m_values.value(QByteArray(GST_TAG_GEO_LOCATION_MOVEMENT_SPEED)).toDouble(); return (metersPerSec * 3600) / 1000; } Q_FOREACH (const QGStreamerMetaDataKey &metadataKey, *qt_gstreamerMetaDataKeys()) { if (metadataKey.qtName == key) return m_values.value(QByteArray::fromRawData(metadataKey.gstName, qstrlen(metadataKey.gstName))); } return QVariant(); }
void CameraBinMetaData::setMetaData(const QString &key, const QVariant &value) { QVariant correctedValue = value; 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; } } Q_FOREACH (const QGStreamerMetaDataKey &metadataKey, *qt_gstreamerMetaDataKeys()) { if (metadataKey.qtName == key) { const char *name = metadataKey.gstName; if (correctedValue.isValid()) { correctedValue.convert(metadataKey.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); return; } } }