Add a metaData property to QVideoFrame.
Change-Id: I6614cd86e3e1e170277bfc751222b5b42cb657eb Reviewed-by: Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com>
This commit is contained in:
committed by
Qt by Nokia
parent
41ff2e6829
commit
c8f48841ef
@@ -115,6 +115,7 @@ public:
|
||||
QAbstractVideoBuffer *buffer;
|
||||
int mappedCount;
|
||||
QMutex mapMutex;
|
||||
QVariantMap metadata;
|
||||
|
||||
private:
|
||||
Q_DISABLE_COPY(QVideoFramePrivate)
|
||||
@@ -753,6 +754,45 @@ void QVideoFrame::setEndTime(qint64 time)
|
||||
d->endTime = 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
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user