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>
This commit is contained in:
committed by
The Qt Project
parent
0e280e78e2
commit
cf68c9d02c
@@ -198,11 +198,13 @@ QVariant CameraBinMetaData::metaData(const QString &key) const
|
|||||||
void CameraBinMetaData::setMetaData(const QString &key, const QVariant &value)
|
void CameraBinMetaData::setMetaData(const QString &key, const QVariant &value)
|
||||||
{
|
{
|
||||||
QVariant correctedValue = value;
|
QVariant correctedValue = value;
|
||||||
if (key == QMediaMetaData::Orientation) {
|
if (value.isValid()) {
|
||||||
correctedValue = toGStreamerOrientation(value);
|
if (key == QMediaMetaData::Orientation) {
|
||||||
} else if (key == QMediaMetaData::GPSSpeed) {
|
correctedValue = toGStreamerOrientation(value);
|
||||||
// kilometers per hour to meters per second.
|
} else if (key == QMediaMetaData::GPSSpeed) {
|
||||||
correctedValue = (value.toDouble() * 1000) / 3600;
|
// kilometers per hour to meters per second.
|
||||||
|
correctedValue = (value.toDouble() * 1000) / 3600;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static const int count = sizeof(qt_gstreamerMetaDataKeys) / sizeof(QGstreamerMetaDataKeyLookup);
|
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) {
|
if (qt_gstreamerMetaDataKeys[i].key == key) {
|
||||||
const char *name = qt_gstreamerMetaDataKeys[i].token;
|
const char *name = qt_gstreamerMetaDataKeys[i].token;
|
||||||
|
|
||||||
correctedValue.convert(qt_gstreamerMetaDataKeys[i].type);
|
if (correctedValue.isValid()) {
|
||||||
|
correctedValue.convert(qt_gstreamerMetaDataKeys[i].type);
|
||||||
m_values.insert(QByteArray::fromRawData(name, qstrlen(name)), correctedValue);
|
m_values.insert(QByteArray::fromRawData(name, qstrlen(name)), correctedValue);
|
||||||
|
} else {
|
||||||
|
m_values.remove(QByteArray::fromRawData(name, qstrlen(name)));
|
||||||
|
}
|
||||||
|
|
||||||
emit QMetaDataWriterControl::metaDataChanged();
|
emit QMetaDataWriterControl::metaDataChanged();
|
||||||
emit metaDataChanged(m_values);
|
emit metaDataChanged(m_values);
|
||||||
|
|||||||
@@ -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);
|
GstIterator *elements = gst_bin_iterate_all_by_interface(GST_BIN(m_camerabin), GST_TYPE_TAG_SETTER);
|
||||||
GstElement *element = 0;
|
GstElement *element = 0;
|
||||||
while (gst_iterator_next(elements, (void**)&element) == GST_ITERATOR_OK) {
|
while (gst_iterator_next(elements, (void**)&element) == GST_ITERATOR_OK) {
|
||||||
|
gst_tag_setter_reset_tags(GST_TAG_SETTER(element));
|
||||||
|
|
||||||
QMapIterator<QByteArray, QVariant> it(data);
|
QMapIterator<QByteArray, QVariant> it(data);
|
||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
it.next();
|
it.next();
|
||||||
|
|||||||
Reference in New Issue
Block a user