diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/multimedia/video/qvideoframe.cpp | 53 | ||||
-rw-r--r-- | src/multimedia/video/qvideoframe.h | 6 |
2 files changed, 55 insertions, 4 deletions
diff --git a/src/multimedia/video/qvideoframe.cpp b/src/multimedia/video/qvideoframe.cpp index 687716ac8..c58b6ebe8 100644 --- a/src/multimedia/video/qvideoframe.cpp +++ b/src/multimedia/video/qvideoframe.cpp @@ -115,6 +115,7 @@ public: QAbstractVideoBuffer *buffer; int mappedCount; QMutex mapMutex; + QVariantMap metadata; private: Q_DISABLE_COPY(QVideoFramePrivate) @@ -754,6 +755,45 @@ void QVideoFrame::setEndTime(qint64 time) } /*! + Returns any extra metadata associated with this frame. + */ +QVariantMap QVideoFrame::availableMetaData() const +{ + return d->metadata; +} + +/*! + Returns any metadata for this frame for the given \a key. + + This might include frame specific information from + a camera, or subtitles from a decoded video stream. + + See the documentation for the relevant video frame + producer for further information about available metadata. + */ +QVariant QVideoFrame::metaData(const QString &key) const +{ + return d->metadata.value(key); +} + +/*! + Sets the metadata for the given \a key to \a value. + + If \a value is a null variant, any metadata for this key will be removed. + + The producer of the video frame might use this to associate + certain data with this frame, or for an intermediate processor + to add information for a consumer of this frame. + */ +void QVideoFrame::setMetaData(const QString &key, const QVariant &value) +{ + if (!value.isNull()) + d->metadata.insert(key, value); + else + d->metadata.remove(key); +} + +/*! Returns a video pixel format equivalent to an image \a format. If there is no equivalent format QVideoFrame::InvalidType is returned instead. @@ -843,6 +883,9 @@ QImage::Format QVideoFrame::imageFormatFromPixelFormat(PixelFormat format) return QImage::Format_Invalid; } + + + #ifndef QT_NO_DEBUG_STREAM QDebug operator<<(QDebug dbg, QVideoFrame::PixelFormat pf) { @@ -1005,12 +1048,16 @@ static QString qFormatTimeStamps(qint64 start, qint64 end) QDebug operator<<(QDebug dbg, const QVideoFrame& f) { - return dbg << "QVideoFrame(" << f.size() << "," + dbg.nospace() << "QVideoFrame(" << f.size() << "," << f.pixelFormat() << ", " << f.handleType() << ", " << f.mapMode() << ", " - << qFormatTimeStamps(f.startTime(), f.endTime()).toLatin1().constData() - << ")"; + << qFormatTimeStamps(f.startTime(), f.endTime()).toLatin1().constData(); + if (f.availableMetaData().count()) { + dbg.nospace() << ", metaData: "; + dbg.nospace() << f.availableMetaData(); + } + return dbg.nospace() << ")"; } #endif diff --git a/src/multimedia/video/qvideoframe.h b/src/multimedia/video/qvideoframe.h index 5c3558721..f6261625e 100644 --- a/src/multimedia/video/qvideoframe.h +++ b/src/multimedia/video/qvideoframe.h @@ -46,6 +46,7 @@ #include <QtCore/qshareddata.h> #include <QtGui/qimage.h> #include <qabstractvideobuffer.h> +#include <QtCore/qvariant.h> QT_BEGIN_HEADER @@ -54,7 +55,6 @@ QT_BEGIN_NAMESPACE QT_MODULE(Multimedia) class QSize; -class QVariant; class QVideoFramePrivate; @@ -156,6 +156,10 @@ public: qint64 endTime() const; void setEndTime(qint64 time); + QVariantMap availableMetaData() const; + QVariant metaData(const QString &key) const; + void setMetaData(const QString &key, const QVariant &value); + static PixelFormat pixelFormatFromImageFormat(QImage::Format format); static QImage::Format imageFormatFromPixelFormat(PixelFormat format); |