Add a metaData property to QVideoFrame.

Change-Id: I6614cd86e3e1e170277bfc751222b5b42cb657eb
Reviewed-by: Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com>
This commit is contained in:
Michael Goddard
2012-01-12 16:11:47 +10:00
committed by Qt by Nokia
parent 41ff2e6829
commit c8f48841ef
3 changed files with 103 additions and 16 deletions

View File

@@ -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

View File

@@ -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);