/**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 3 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL3 included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 3 requirements ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 2.0 or (at your option) the GNU General ** Public license version 3 or any later version approved by the KDE Free ** Qt Foundation. The licenses are as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-2.0.html and ** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "qgstreamercapturemetadatacontrol.h" #include #include #include typedef QMap QGstreamerMetaDataKeyLookup; Q_GLOBAL_STATIC(QGstreamerMetaDataKeyLookup, metadataKeys) static const QGstreamerMetaDataKeyLookup *qt_gstreamerMetaDataKeys() { if (metadataKeys->isEmpty()) { metadataKeys->insert(QMediaMetaData::Title, GST_TAG_TITLE); metadataKeys->insert(QMediaMetaData::SubTitle, 0); //metadataKeys->insert(QMediaMetaData::Author, 0); metadataKeys->insert(QMediaMetaData::Comment, GST_TAG_COMMENT); metadataKeys->insert(QMediaMetaData::Description, GST_TAG_DESCRIPTION); //metadataKeys->insert(QMediaMetaData::Category, 0); metadataKeys->insert(QMediaMetaData::Genre, GST_TAG_GENRE); //metadataKeys->insert(QMediaMetaData::Year, 0); //metadataKeys->insert(QMediaMetaData::UserRating, 0); metadataKeys->insert(QMediaMetaData::Language, GST_TAG_LANGUAGE_CODE); metadataKeys->insert(QMediaMetaData::Publisher, GST_TAG_ORGANIZATION); metadataKeys->insert(QMediaMetaData::Copyright, GST_TAG_COPYRIGHT); //metadataKeys->insert(QMediaMetaData::ParentalRating, 0); //metadataKeys->insert(QMediaMetaData::RatingOrganisation, 0); // Media //metadataKeys->insert(QMediaMetaData::Size, 0); //metadataKeys->insert(QMediaMetaData::MediaType, 0); metadataKeys->insert(QMediaMetaData::Duration, GST_TAG_DURATION); // Audio metadataKeys->insert(QMediaMetaData::AudioBitRate, GST_TAG_BITRATE); metadataKeys->insert(QMediaMetaData::AudioCodec, GST_TAG_AUDIO_CODEC); //metadataKeys->insert(QMediaMetaData::ChannelCount, 0); //metadataKeys->insert(QMediaMetaData::SampleRate, 0); // Music metadataKeys->insert(QMediaMetaData::AlbumTitle, GST_TAG_ALBUM); metadataKeys->insert(QMediaMetaData::AlbumArtist, GST_TAG_ARTIST); metadataKeys->insert(QMediaMetaData::ContributingArtist, GST_TAG_PERFORMER); metadataKeys->insert(QMediaMetaData::Composer, GST_TAG_COMPOSER); //metadataKeys->insert(QMediaMetaData::Conductor, 0); //metadataKeys->insert(QMediaMetaData::Lyrics, 0); //metadataKeys->insert(QMediaMetaData::Mood, 0); metadataKeys->insert(QMediaMetaData::TrackNumber, GST_TAG_TRACK_NUMBER); //metadataKeys->insert(QMediaMetaData::CoverArtUrlSmall, 0); //metadataKeys->insert(QMediaMetaData::CoverArtUrlLarge, 0); // Image/Video //metadataKeys->insert(QMediaMetaData::Resolution, 0); //metadataKeys->insert(QMediaMetaData::PixelAspectRatio, 0); // Video //metadataKeys->insert(QMediaMetaData::VideoFrameRate, 0); //metadataKeys->insert(QMediaMetaData::VideoBitRate, 0); metadataKeys->insert(QMediaMetaData::VideoCodec, GST_TAG_VIDEO_CODEC); //metadataKeys->insert(QMediaMetaData::PosterUrl, 0); // Movie //metadataKeys->insert(QMediaMetaData::ChapterNumber, 0); //metadataKeys->insert(QMediaMetaData::Director, 0); metadataKeys->insert(QMediaMetaData::LeadPerformer, GST_TAG_PERFORMER); //metadataKeys->insert(QMediaMetaData::Writer, 0); // Photos //metadataKeys->insert(QMediaMetaData::CameraManufacturer, 0); //metadataKeys->insert(QMediaMetaData::CameraModel, 0); //metadataKeys->insert(QMediaMetaData::Event, 0); //metadataKeys->insert(QMediaMetaData::Subject, 0 } } return metadataKeys; } QGstreamerCaptureMetaDataControl::QGstreamerCaptureMetaDataControl(QObject *parent) :QMetaDataWriterControl(parent) { } 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 QGstreamerCaptureMetaDataControl::availableMetaData() const { QStringList res; for (auto it = m_values.keyBegin(), end = m_values.keyEnd(); it != end; ++it) { QString tag = qt_gstreamerMetaDataKeys()->key(*it); if (!tag.isEmpty()) res.append(tag); } return res; }