diff options
Diffstat (limited to 'tests/auto/qvideoframe/tst_qvideoframe.cpp')
-rw-r--r-- | tests/auto/qvideoframe/tst_qvideoframe.cpp | 969 |
1 files changed, 0 insertions, 969 deletions
diff --git a/tests/auto/qvideoframe/tst_qvideoframe.cpp b/tests/auto/qvideoframe/tst_qvideoframe.cpp deleted file mode 100644 index 52d5771..0000000 --- a/tests/auto/qvideoframe/tst_qvideoframe.cpp +++ /dev/null @@ -1,969 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//TESTED_COMPONENT=src/multimedia - -#include <QtTest/QtTest> - -#include <qvideoframe.h> -#include <QtGui/QImage> -#include <QtCore/QPointer> - -class tst_QVideoFrame : public QObject -{ - Q_OBJECT -public: - tst_QVideoFrame(); - ~tst_QVideoFrame(); - -public slots: - void initTestCase(); - void cleanupTestCase(); - void init(); - void cleanup(); - -private slots: - void create_data(); - void create(); - void createInvalid_data(); - void createInvalid(); - void createFromBuffer_data(); - void createFromBuffer(); - void createFromImage_data(); - void createFromImage(); - void createFromIncompatibleImage(); - void createNull(); - void destructor(); - void copy_data(); - void copy(); - void assign_data(); - void assign(); - void map_data(); - void map(); - void mapImage_data(); - void mapImage(); - void imageDetach(); - void formatConversion_data(); - void formatConversion(); - - void isMapped(); - void isReadable(); - void isWritable(); -}; - -Q_DECLARE_METATYPE(QImage::Format) -Q_DECLARE_METATYPE(QVideoFrame) - -class QtTestVideoBuffer : public QObject, public QAbstractVideoBuffer -{ - Q_OBJECT -public: - QtTestVideoBuffer() - : QAbstractVideoBuffer(NoHandle) {} - explicit QtTestVideoBuffer(QAbstractVideoBuffer::HandleType type) - : QAbstractVideoBuffer(type) {} - - MapMode mapMode() const { return NotMapped; } - - uchar *map(MapMode, int *, int *) { return 0; } - void unmap() {} -}; - -tst_QVideoFrame::tst_QVideoFrame() -{ -} - -tst_QVideoFrame::~tst_QVideoFrame() -{ -} - -void tst_QVideoFrame::initTestCase() -{ -} - -void tst_QVideoFrame::cleanupTestCase() -{ -} - -void tst_QVideoFrame::init() -{ -} - -void tst_QVideoFrame::cleanup() -{ -} - -void tst_QVideoFrame::create_data() -{ - QTest::addColumn<QSize>("size"); - QTest::addColumn<QVideoFrame::PixelFormat>("pixelFormat"); - QTest::addColumn<int>("bytes"); - QTest::addColumn<int>("bytesPerLine"); - - QTest::newRow("64x64 ARGB32") - << QSize(64, 64) - << QVideoFrame::Format_ARGB32 - << 16384 - << 256; - QTest::newRow("32x256 YUV420P") - << QSize(32, 256) - << QVideoFrame::Format_YUV420P - << 13288 - << 32; -} - -void tst_QVideoFrame::create() -{ - QFETCH(QSize, size); - QFETCH(QVideoFrame::PixelFormat, pixelFormat); - QFETCH(int, bytes); - QFETCH(int, bytesPerLine); - - QVideoFrame frame(bytes, size, bytesPerLine, pixelFormat); - - QVERIFY(frame.isValid()); - QCOMPARE(frame.handleType(), QAbstractVideoBuffer::NoHandle); - QCOMPARE(frame.handle(), QVariant()); - QCOMPARE(frame.pixelFormat(), pixelFormat); - QCOMPARE(frame.size(), size); - QCOMPARE(frame.width(), size.width()); - QCOMPARE(frame.height(), size.height()); - QCOMPARE(frame.fieldType(), QVideoFrame::ProgressiveFrame); - QCOMPARE(frame.startTime(), qint64(-1)); - QCOMPARE(frame.endTime(), qint64(-1)); -} - -void tst_QVideoFrame::createInvalid_data() -{ - QTest::addColumn<QSize>("size"); - QTest::addColumn<QVideoFrame::PixelFormat>("pixelFormat"); - QTest::addColumn<int>("bytes"); - QTest::addColumn<int>("bytesPerLine"); - - QTest::newRow("64x64 ARGB32 0 size") - << QSize(64, 64) - << QVideoFrame::Format_ARGB32 - << 0 - << 45; - QTest::newRow("32x256 YUV420P negative size") - << QSize(32, 256) - << QVideoFrame::Format_YUV420P - << -13288 - << 32; -} - -void tst_QVideoFrame::createInvalid() -{ - QFETCH(QSize, size); - QFETCH(QVideoFrame::PixelFormat, pixelFormat); - QFETCH(int, bytes); - QFETCH(int, bytesPerLine); - - QVideoFrame frame(bytes, size, bytesPerLine, pixelFormat); - - QVERIFY(!frame.isValid()); - QCOMPARE(frame.handleType(), QAbstractVideoBuffer::NoHandle); - QCOMPARE(frame.handle(), QVariant()); - QCOMPARE(frame.pixelFormat(), pixelFormat); - QCOMPARE(frame.size(), size); - QCOMPARE(frame.width(), size.width()); - QCOMPARE(frame.height(), size.height()); - QCOMPARE(frame.fieldType(), QVideoFrame::ProgressiveFrame); - QCOMPARE(frame.startTime(), qint64(-1)); - QCOMPARE(frame.endTime(), qint64(-1)); -} - -void tst_QVideoFrame::createFromBuffer_data() -{ - QTest::addColumn<QAbstractVideoBuffer::HandleType>("handleType"); - QTest::addColumn<QSize>("size"); - QTest::addColumn<QVideoFrame::PixelFormat>("pixelFormat"); - - QTest::newRow("64x64 ARGB32 no handle") - << QAbstractVideoBuffer::NoHandle - << QSize(64, 64) - << QVideoFrame::Format_ARGB32; - QTest::newRow("64x64 ARGB32 gl handle") - << QAbstractVideoBuffer::GLTextureHandle - << QSize(64, 64) - << QVideoFrame::Format_ARGB32; - QTest::newRow("64x64 ARGB32 user handle") - << QAbstractVideoBuffer::UserHandle - << QSize(64, 64) - << QVideoFrame::Format_ARGB32; -} - -void tst_QVideoFrame::createFromBuffer() -{ - QFETCH(QAbstractVideoBuffer::HandleType, handleType); - QFETCH(QSize, size); - QFETCH(QVideoFrame::PixelFormat, pixelFormat); - - QVideoFrame frame(new QtTestVideoBuffer(handleType), size, pixelFormat); - - QVERIFY(frame.isValid()); - QCOMPARE(frame.handleType(), handleType); - QCOMPARE(frame.pixelFormat(), pixelFormat); - QCOMPARE(frame.size(), size); - QCOMPARE(frame.width(), size.width()); - QCOMPARE(frame.height(), size.height()); - QCOMPARE(frame.fieldType(), QVideoFrame::ProgressiveFrame); - QCOMPARE(frame.startTime(), qint64(-1)); - QCOMPARE(frame.endTime(), qint64(-1)); -} - -void tst_QVideoFrame::createFromImage_data() -{ - QTest::addColumn<QSize>("size"); - QTest::addColumn<QImage::Format>("imageFormat"); - QTest::addColumn<QVideoFrame::PixelFormat>("pixelFormat"); - - QTest::newRow("64x64 RGB32") - << QSize(64, 64) - << QImage::Format_RGB32 - << QVideoFrame::Format_RGB32; - QTest::newRow("12x45 RGB16") - << QSize(12, 45) - << QImage::Format_RGB16 - << QVideoFrame::Format_RGB565; - QTest::newRow("19x46 ARGB32_Premultiplied") - << QSize(19, 46) - << QImage::Format_ARGB32_Premultiplied - << QVideoFrame::Format_ARGB32_Premultiplied; -} - -void tst_QVideoFrame::createFromImage() -{ - QFETCH(QSize, size); - QFETCH(QImage::Format, imageFormat); - QFETCH(QVideoFrame::PixelFormat, pixelFormat); - - const QImage image(size.width(), size.height(), imageFormat); - - QVideoFrame frame(image); - - QVERIFY(frame.isValid()); - QCOMPARE(frame.handleType(), QAbstractVideoBuffer::NoHandle); - QCOMPARE(frame.pixelFormat(), pixelFormat); - QCOMPARE(frame.size(), size); - QCOMPARE(frame.width(), size.width()); - QCOMPARE(frame.height(), size.height()); - QCOMPARE(frame.fieldType(), QVideoFrame::ProgressiveFrame); - QCOMPARE(frame.startTime(), qint64(-1)); - QCOMPARE(frame.endTime(), qint64(-1)); -} - -void tst_QVideoFrame::createFromIncompatibleImage() -{ - const QImage image(64, 64, QImage::Format_Mono); - - QVideoFrame frame(image); - - QVERIFY(!frame.isValid()); - QCOMPARE(frame.handleType(), QAbstractVideoBuffer::NoHandle); - QCOMPARE(frame.pixelFormat(), QVideoFrame::Format_Invalid); - QCOMPARE(frame.size(), QSize(64, 64)); - QCOMPARE(frame.width(), 64); - QCOMPARE(frame.height(), 64); - QCOMPARE(frame.fieldType(), QVideoFrame::ProgressiveFrame); - QCOMPARE(frame.startTime(), qint64(-1)); - QCOMPARE(frame.endTime(), qint64(-1)); -} - -void tst_QVideoFrame::createNull() -{ - // Default ctor - { - QVideoFrame frame; - - QVERIFY(!frame.isValid()); - QCOMPARE(frame.handleType(), QAbstractVideoBuffer::NoHandle); - QCOMPARE(frame.pixelFormat(), QVideoFrame::Format_Invalid); - QCOMPARE(frame.size(), QSize()); - QCOMPARE(frame.width(), -1); - QCOMPARE(frame.height(), -1); - QCOMPARE(frame.fieldType(), QVideoFrame::ProgressiveFrame); - QCOMPARE(frame.startTime(), qint64(-1)); - QCOMPARE(frame.endTime(), qint64(-1)); - QCOMPARE(frame.mapMode(), QAbstractVideoBuffer::NotMapped); - QVERIFY(!frame.map(QAbstractVideoBuffer::ReadOnly)); - QVERIFY(!frame.map(QAbstractVideoBuffer::ReadWrite)); - QVERIFY(!frame.map(QAbstractVideoBuffer::WriteOnly)); - QCOMPARE(frame.isMapped(), false); - frame.unmap(); // Shouldn't crash - QCOMPARE(frame.isReadable(), false); - QCOMPARE(frame.isWritable(), false); - } - - // Null buffer (shouldn't crash) - { - QVideoFrame frame(0, QSize(1024,768), QVideoFrame::Format_ARGB32); - QVERIFY(!frame.isValid()); - QCOMPARE(frame.handleType(), QAbstractVideoBuffer::NoHandle); - QCOMPARE(frame.pixelFormat(), QVideoFrame::Format_ARGB32); - QCOMPARE(frame.size(), QSize(1024, 768)); - QCOMPARE(frame.width(), 1024); - QCOMPARE(frame.height(), 768); - QCOMPARE(frame.fieldType(), QVideoFrame::ProgressiveFrame); - QCOMPARE(frame.startTime(), qint64(-1)); - QCOMPARE(frame.endTime(), qint64(-1)); - QCOMPARE(frame.mapMode(), QAbstractVideoBuffer::NotMapped); - QVERIFY(!frame.map(QAbstractVideoBuffer::ReadOnly)); - QVERIFY(!frame.map(QAbstractVideoBuffer::ReadWrite)); - QVERIFY(!frame.map(QAbstractVideoBuffer::WriteOnly)); - QCOMPARE(frame.isMapped(), false); - frame.unmap(); // Shouldn't crash - QCOMPARE(frame.isReadable(), false); - QCOMPARE(frame.isWritable(), false); - } -} - -void tst_QVideoFrame::destructor() -{ - QPointer<QtTestVideoBuffer> buffer = new QtTestVideoBuffer; - - { - QVideoFrame frame(buffer, QSize(4, 1), QVideoFrame::Format_ARGB32); - } - - QVERIFY(buffer.isNull()); -} - -void tst_QVideoFrame::copy_data() -{ - QTest::addColumn<QAbstractVideoBuffer::HandleType>("handleType"); - QTest::addColumn<QSize>("size"); - QTest::addColumn<QVideoFrame::PixelFormat>("pixelFormat"); - QTest::addColumn<QVideoFrame::FieldType>("fieldType"); - QTest::addColumn<qint64>("startTime"); - QTest::addColumn<qint64>("endTime"); - - QTest::newRow("64x64 ARGB32") - << QAbstractVideoBuffer::GLTextureHandle - << QSize(64, 64) - << QVideoFrame::Format_ARGB32 - << QVideoFrame::TopField - << qint64(63641740) - << qint64(63641954); - QTest::newRow("64x64 ARGB32") - << QAbstractVideoBuffer::GLTextureHandle - << QSize(64, 64) - << QVideoFrame::Format_ARGB32 - << QVideoFrame::BottomField - << qint64(63641740) - << qint64(63641954); - QTest::newRow("32x256 YUV420P") - << QAbstractVideoBuffer::UserHandle - << QSize(32, 256) - << QVideoFrame::Format_YUV420P - << QVideoFrame::InterlacedFrame - << qint64(12345) - << qint64(12389); - QTest::newRow("1052x756 ARGB32") - << QAbstractVideoBuffer::NoHandle - << QSize(1052, 756) - << QVideoFrame::Format_ARGB32 - << QVideoFrame::ProgressiveFrame - << qint64(12345) - << qint64(12389); - QTest::newRow("32x256 YUV420P") - << QAbstractVideoBuffer::UserHandle - << QSize(32, 256) - << QVideoFrame::Format_YUV420P - << QVideoFrame::InterlacedFrame - << qint64(12345) - << qint64(12389); -} - -void tst_QVideoFrame::copy() -{ - QFETCH(QAbstractVideoBuffer::HandleType, handleType); - QFETCH(QSize, size); - QFETCH(QVideoFrame::PixelFormat, pixelFormat); - QFETCH(QVideoFrame::FieldType, fieldType); - QFETCH(qint64, startTime); - QFETCH(qint64, endTime); - - QPointer<QtTestVideoBuffer> buffer = new QtTestVideoBuffer(handleType); - - { - QVideoFrame frame(buffer, size, pixelFormat); - frame.setFieldType(QVideoFrame::FieldType(fieldType)); - frame.setStartTime(startTime); - frame.setEndTime(endTime); - - QVERIFY(frame.isValid()); - QCOMPARE(frame.handleType(), handleType); - QCOMPARE(frame.pixelFormat(), pixelFormat); - QCOMPARE(frame.size(), size); - QCOMPARE(frame.width(), size.width()); - QCOMPARE(frame.height(), size.height()); - QCOMPARE(frame.fieldType(), fieldType); - QCOMPARE(frame.startTime(), startTime); - QCOMPARE(frame.endTime(), endTime); - - { - QVideoFrame otherFrame(frame); - - QVERIFY(!buffer.isNull()); - - QVERIFY(otherFrame.isValid()); - QCOMPARE(otherFrame.handleType(), handleType); - QCOMPARE(otherFrame.pixelFormat(), pixelFormat); - QCOMPARE(otherFrame.size(), size); - QCOMPARE(otherFrame.width(), size.width()); - QCOMPARE(otherFrame.height(), size.height()); - QCOMPARE(otherFrame.fieldType(), fieldType); - QCOMPARE(otherFrame.startTime(), startTime); - QCOMPARE(otherFrame.endTime(), endTime); - - otherFrame.setEndTime(-1); - - QVERIFY(!buffer.isNull()); - - QVERIFY(otherFrame.isValid()); - QCOMPARE(otherFrame.handleType(), handleType); - QCOMPARE(otherFrame.pixelFormat(), pixelFormat); - QCOMPARE(otherFrame.size(), size); - QCOMPARE(otherFrame.width(), size.width()); - QCOMPARE(otherFrame.height(), size.height()); - QCOMPARE(otherFrame.fieldType(), fieldType); - QCOMPARE(otherFrame.startTime(), startTime); - QCOMPARE(otherFrame.endTime(), qint64(-1)); - } - - QVERIFY(!buffer.isNull()); - - QVERIFY(frame.isValid()); - QCOMPARE(frame.handleType(), handleType); - QCOMPARE(frame.pixelFormat(), pixelFormat); - QCOMPARE(frame.size(), size); - QCOMPARE(frame.width(), size.width()); - QCOMPARE(frame.height(), size.height()); - QCOMPARE(frame.fieldType(), fieldType); - QCOMPARE(frame.startTime(), startTime); - QCOMPARE(frame.endTime(), qint64(-1)); // Explicitly shared. - } - - QVERIFY(buffer.isNull()); -} - -void tst_QVideoFrame::assign_data() -{ - QTest::addColumn<QAbstractVideoBuffer::HandleType>("handleType"); - QTest::addColumn<QSize>("size"); - QTest::addColumn<QVideoFrame::PixelFormat>("pixelFormat"); - QTest::addColumn<QVideoFrame::FieldType>("fieldType"); - QTest::addColumn<qint64>("startTime"); - QTest::addColumn<qint64>("endTime"); - - QTest::newRow("64x64 ARGB32") - << QAbstractVideoBuffer::GLTextureHandle - << QSize(64, 64) - << QVideoFrame::Format_ARGB32 - << QVideoFrame::TopField - << qint64(63641740) - << qint64(63641954); - QTest::newRow("32x256 YUV420P") - << QAbstractVideoBuffer::UserHandle - << QSize(32, 256) - << QVideoFrame::Format_YUV420P - << QVideoFrame::InterlacedFrame - << qint64(12345) - << qint64(12389); -} - -void tst_QVideoFrame::assign() -{ - QFETCH(QAbstractVideoBuffer::HandleType, handleType); - QFETCH(QSize, size); - QFETCH(QVideoFrame::PixelFormat, pixelFormat); - QFETCH(QVideoFrame::FieldType, fieldType); - QFETCH(qint64, startTime); - QFETCH(qint64, endTime); - - QPointer<QtTestVideoBuffer> buffer = new QtTestVideoBuffer(handleType); - - QVideoFrame frame; - { - QVideoFrame otherFrame(buffer, size, pixelFormat); - otherFrame.setFieldType(fieldType); - otherFrame.setStartTime(startTime); - otherFrame.setEndTime(endTime); - - frame = otherFrame; - - QVERIFY(!buffer.isNull()); - - QVERIFY(otherFrame.isValid()); - QCOMPARE(otherFrame.handleType(), handleType); - QCOMPARE(otherFrame.pixelFormat(), pixelFormat); - QCOMPARE(otherFrame.size(), size); - QCOMPARE(otherFrame.width(), size.width()); - QCOMPARE(otherFrame.height(), size.height()); - QCOMPARE(otherFrame.fieldType(), fieldType); - QCOMPARE(otherFrame.startTime(), startTime); - QCOMPARE(otherFrame.endTime(), endTime); - - otherFrame.setStartTime(-1); - - QVERIFY(!buffer.isNull()); - - QVERIFY(otherFrame.isValid()); - QCOMPARE(otherFrame.handleType(), handleType); - QCOMPARE(otherFrame.pixelFormat(), pixelFormat); - QCOMPARE(otherFrame.size(), size); - QCOMPARE(otherFrame.width(), size.width()); - QCOMPARE(otherFrame.height(), size.height()); - QCOMPARE(otherFrame.fieldType(), fieldType); - QCOMPARE(otherFrame.startTime(), qint64(-1)); - QCOMPARE(otherFrame.endTime(), endTime); - } - - QVERIFY(!buffer.isNull()); - - QVERIFY(frame.isValid()); - QCOMPARE(frame.handleType(), handleType); - QCOMPARE(frame.pixelFormat(), pixelFormat); - QCOMPARE(frame.size(), size); - QCOMPARE(frame.width(), size.width()); - QCOMPARE(frame.height(), size.height()); - QCOMPARE(frame.fieldType(), fieldType); - QCOMPARE(frame.startTime(), qint64(-1)); - QCOMPARE(frame.endTime(), endTime); - - frame = QVideoFrame(); - - QVERIFY(buffer.isNull()); - - QVERIFY(!frame.isValid()); - QCOMPARE(frame.handleType(), QAbstractVideoBuffer::NoHandle); - QCOMPARE(frame.pixelFormat(), QVideoFrame::Format_Invalid); - QCOMPARE(frame.size(), QSize()); - QCOMPARE(frame.width(), -1); - QCOMPARE(frame.height(), -1); - QCOMPARE(frame.fieldType(), QVideoFrame::ProgressiveFrame); - QCOMPARE(frame.startTime(), qint64(-1)); - QCOMPARE(frame.endTime(), qint64(-1)); -} - -void tst_QVideoFrame::map_data() -{ - QTest::addColumn<QSize>("size"); - QTest::addColumn<int>("mappedBytes"); - QTest::addColumn<int>("bytesPerLine"); - QTest::addColumn<QVideoFrame::PixelFormat>("pixelFormat"); - QTest::addColumn<QAbstractVideoBuffer::MapMode>("mode"); - - QTest::newRow("read-only") - << QSize(64, 64) - << 16384 - << 256 - << QVideoFrame::Format_ARGB32 - << QAbstractVideoBuffer::ReadOnly; - - QTest::newRow("write-only") - << QSize(64, 64) - << 16384 - << 256 - << QVideoFrame::Format_ARGB32 - << QAbstractVideoBuffer::WriteOnly; - - QTest::newRow("read-write") - << QSize(64, 64) - << 16384 - << 256 - << QVideoFrame::Format_ARGB32 - << QAbstractVideoBuffer::ReadWrite; -} - -void tst_QVideoFrame::map() -{ - QFETCH(QSize, size); - QFETCH(int, mappedBytes); - QFETCH(int, bytesPerLine); - QFETCH(QVideoFrame::PixelFormat, pixelFormat); - QFETCH(QAbstractVideoBuffer::MapMode, mode); - - QVideoFrame frame(mappedBytes, size, bytesPerLine, pixelFormat); - - QVERIFY(!frame.bits()); - QCOMPARE(frame.mappedBytes(), 0); - QCOMPARE(frame.bytesPerLine(), 0); - QCOMPARE(frame.mapMode(), QAbstractVideoBuffer::NotMapped); - - QVERIFY(frame.map(mode)); - - // Mapping twice should fail, but leave it mapped (and the mode is ignored) - QVERIFY(!frame.map(mode)); - - QVERIFY(frame.bits()); - QCOMPARE(frame.mappedBytes(), mappedBytes); - QCOMPARE(frame.bytesPerLine(), bytesPerLine); - QCOMPARE(frame.mapMode(), mode); - - frame.unmap(); - - QVERIFY(!frame.bits()); - QCOMPARE(frame.mappedBytes(), 0); - QCOMPARE(frame.bytesPerLine(), 0); - QCOMPARE(frame.mapMode(), QAbstractVideoBuffer::NotMapped); -} - -void tst_QVideoFrame::mapImage_data() -{ - QTest::addColumn<QSize>("size"); - QTest::addColumn<QImage::Format>("format"); - QTest::addColumn<QAbstractVideoBuffer::MapMode>("mode"); - - QTest::newRow("read-only") - << QSize(64, 64) - << QImage::Format_ARGB32 - << QAbstractVideoBuffer::ReadOnly; - - QTest::newRow("write-only") - << QSize(15, 106) - << QImage::Format_RGB32 - << QAbstractVideoBuffer::WriteOnly; - - QTest::newRow("read-write") - << QSize(23, 111) - << QImage::Format_RGB16 - << QAbstractVideoBuffer::ReadWrite; -} - -void tst_QVideoFrame::mapImage() -{ - QFETCH(QSize, size); - QFETCH(QImage::Format, format); - QFETCH(QAbstractVideoBuffer::MapMode, mode); - - QImage image(size.width(), size.height(), format); - - QVideoFrame frame(image); - - QVERIFY(!frame.bits()); - QCOMPARE(frame.mappedBytes(), 0); - QCOMPARE(frame.bytesPerLine(), 0); - QCOMPARE(frame.mapMode(), QAbstractVideoBuffer::NotMapped); - - QVERIFY(frame.map(mode)); - - QVERIFY(frame.bits()); - QCOMPARE(frame.mappedBytes(), image.byteCount()); - QCOMPARE(frame.bytesPerLine(), image.bytesPerLine()); - QCOMPARE(frame.mapMode(), mode); - - frame.unmap(); - - QVERIFY(!frame.bits()); - QCOMPARE(frame.mappedBytes(), 0); - QCOMPARE(frame.bytesPerLine(), 0); - QCOMPARE(frame.mapMode(), QAbstractVideoBuffer::NotMapped); -} - -void tst_QVideoFrame::imageDetach() -{ - const uint red = qRgb(255, 0, 0); - const uint blue = qRgb(0, 0, 255); - - QImage image(8, 8, QImage::Format_RGB32); - - image.fill(red); - QCOMPARE(image.pixel(4, 4), red); - - QVideoFrame frame(image); - - QVERIFY(frame.map(QAbstractVideoBuffer::ReadWrite)); - - QImage frameImage(frame.bits(), 8, 8, frame.bytesPerLine(), QImage::Format_RGB32); - - QCOMPARE(frameImage.pixel(4, 4), red); - - frameImage.fill(blue); - QCOMPARE(frameImage.pixel(4, 4), blue); - - // Original image has detached and is therefore unchanged. - QCOMPARE(image.pixel(4, 4), red); -} - -void tst_QVideoFrame::formatConversion_data() -{ - QTest::addColumn<QImage::Format>("imageFormat"); - QTest::addColumn<QVideoFrame::PixelFormat>("pixelFormat"); - - QTest::newRow("QImage::Format_RGB32 | QVideoFrame::Format_RGB32") - << QImage::Format_RGB32 - << QVideoFrame::Format_RGB32; - QTest::newRow("QImage::Format_ARGB32 | QVideoFrame::Format_ARGB32") - << QImage::Format_ARGB32 - << QVideoFrame::Format_ARGB32; - QTest::newRow("QImage::Format_ARGB32_Premultiplied | QVideoFrame::Format_ARGB32_Premultiplied") - << QImage::Format_ARGB32_Premultiplied - << QVideoFrame::Format_ARGB32_Premultiplied; - QTest::newRow("QImage::Format_RGB16 | QVideoFrame::Format_RGB565") - << QImage::Format_RGB16 - << QVideoFrame::Format_RGB565; - QTest::newRow("QImage::Format_ARGB8565_Premultiplied | QVideoFrame::Format_ARGB8565_Premultiplied") - << QImage::Format_ARGB8565_Premultiplied - << QVideoFrame::Format_ARGB8565_Premultiplied; - QTest::newRow("QImage::Format_RGB555 | QVideoFrame::Format_RGB555") - << QImage::Format_RGB555 - << QVideoFrame::Format_RGB555; - QTest::newRow("QImage::Format_RGB888 | QVideoFrame::Format_RGB24") - << QImage::Format_RGB888 - << QVideoFrame::Format_RGB24; - - QTest::newRow("QImage::Format_MonoLSB") - << QImage::Format_MonoLSB - << QVideoFrame::Format_Invalid; - QTest::newRow("QImage::Format_Indexed8") - << QImage::Format_Indexed8 - << QVideoFrame::Format_Invalid; - QTest::newRow("QImage::Format_ARGB6666_Premultiplied") - << QImage::Format_ARGB6666_Premultiplied - << QVideoFrame::Format_Invalid; - QTest::newRow("QImage::Format_ARGB8555_Premultiplied") - << QImage::Format_ARGB8555_Premultiplied - << QVideoFrame::Format_Invalid; - QTest::newRow("QImage::Format_RGB666") - << QImage::Format_RGB666 - << QVideoFrame::Format_Invalid; - QTest::newRow("QImage::Format_RGB444") - << QImage::Format_RGB444 - << QVideoFrame::Format_Invalid; - QTest::newRow("QImage::Format_ARGB4444_Premultiplied") - << QImage::Format_ARGB4444_Premultiplied - << QVideoFrame::Format_Invalid; - - QTest::newRow("QVideoFrame::Format_BGRA32") - << QImage::Format_Invalid - << QVideoFrame::Format_BGRA32; - QTest::newRow("QVideoFrame::Format_BGRA32_Premultiplied") - << QImage::Format_Invalid - << QVideoFrame::Format_BGRA32_Premultiplied; - QTest::newRow("QVideoFrame::Format_BGR32") - << QImage::Format_Invalid - << QVideoFrame::Format_BGR32; - QTest::newRow("QVideoFrame::Format_BGR24") - << QImage::Format_Invalid - << QVideoFrame::Format_BGR24; - QTest::newRow("QVideoFrame::Format_BGR565") - << QImage::Format_Invalid - << QVideoFrame::Format_BGR565; - QTest::newRow("QVideoFrame::Format_BGR555") - << QImage::Format_Invalid - << QVideoFrame::Format_BGR555; - QTest::newRow("QVideoFrame::Format_BGRA5658_Premultiplied") - << QImage::Format_Invalid - << QVideoFrame::Format_BGRA5658_Premultiplied; - QTest::newRow("QVideoFrame::Format_AYUV444") - << QImage::Format_Invalid - << QVideoFrame::Format_AYUV444; - QTest::newRow("QVideoFrame::Format_AYUV444_Premultiplied") - << QImage::Format_Invalid - << QVideoFrame::Format_AYUV444_Premultiplied; - QTest::newRow("QVideoFrame::Format_YUV444") - << QImage::Format_Invalid - << QVideoFrame::Format_YUV444; - QTest::newRow("QVideoFrame::Format_YUV420P") - << QImage::Format_Invalid - << QVideoFrame::Format_YUV420P; - QTest::newRow("QVideoFrame::Format_YV12") - << QImage::Format_Invalid - << QVideoFrame::Format_YV12; - QTest::newRow("QVideoFrame::Format_UYVY") - << QImage::Format_Invalid - << QVideoFrame::Format_UYVY; - QTest::newRow("QVideoFrame::Format_YUYV") - << QImage::Format_Invalid - << QVideoFrame::Format_YUYV; - QTest::newRow("QVideoFrame::Format_NV12") - << QImage::Format_Invalid - << QVideoFrame::Format_NV12; - QTest::newRow("QVideoFrame::Format_NV21") - << QImage::Format_Invalid - << QVideoFrame::Format_NV21; - QTest::newRow("QVideoFrame::Format_IMC1") - << QImage::Format_Invalid - << QVideoFrame::Format_IMC1; - QTest::newRow("QVideoFrame::Format_IMC2") - << QImage::Format_Invalid - << QVideoFrame::Format_IMC2; - QTest::newRow("QVideoFrame::Format_IMC3") - << QImage::Format_Invalid - << QVideoFrame::Format_IMC3; - QTest::newRow("QVideoFrame::Format_IMC4") - << QImage::Format_Invalid - << QVideoFrame::Format_IMC4; - QTest::newRow("QVideoFrame::Format_Y8") - << QImage::Format_Invalid - << QVideoFrame::Format_Y8; - QTest::newRow("QVideoFrame::Format_Y16") - << QImage::Format_Invalid - << QVideoFrame::Format_Y16; - QTest::newRow("QVideoFrame::Format_Jpeg") - << QImage::Format_Invalid - << QVideoFrame::Format_Jpeg; - QTest::newRow("QVideoFrame::Format_CameraRaw") - << QImage::Format_Invalid - << QVideoFrame::Format_CameraRaw; - QTest::newRow("QVideoFrame::Format_AdobeDng") - << QImage::Format_Invalid - << QVideoFrame::Format_AdobeDng; - QTest::newRow("QVideoFrame::Format_User") - << QImage::Format_Invalid - << QVideoFrame::Format_User; - QTest::newRow("QVideoFrame::Format_User + 1") - << QImage::Format_Invalid - << QVideoFrame::PixelFormat(QVideoFrame::Format_User + 1); -} - -void tst_QVideoFrame::formatConversion() -{ - QFETCH(QImage::Format, imageFormat); - QFETCH(QVideoFrame::PixelFormat, pixelFormat); - - QCOMPARE(QVideoFrame::pixelFormatFromImageFormat(imageFormat) == pixelFormat, - imageFormat != QImage::Format_Invalid); - - QCOMPARE(QVideoFrame::imageFormatFromPixelFormat(pixelFormat) == imageFormat, - pixelFormat != QVideoFrame::Format_Invalid); -} - -#define TEST_MAPPED(frame, mode) \ -do { \ - QVERIFY(frame.bits()); \ - QVERIFY(frame.isMapped()); \ - QCOMPARE(frame.mappedBytes(), 16384); \ - QCOMPARE(frame.bytesPerLine(), 256); \ - QCOMPARE(frame.mapMode(), mode); \ -} while (0) - -#define TEST_UNMAPPED(frame) \ -do { \ - QVERIFY(!frame.bits()); \ - QVERIFY(!frame.isMapped()); \ - QCOMPARE(frame.mappedBytes(), 0); \ - QCOMPARE(frame.bytesPerLine(), 0); \ - QCOMPARE(frame.mapMode(), QAbstractVideoBuffer::NotMapped); \ -} while (0) - -void tst_QVideoFrame::isMapped() -{ - QVideoFrame frame(16384, QSize(64, 64), 256, QVideoFrame::Format_ARGB32); - const QVideoFrame& constFrame(frame); - - TEST_UNMAPPED(frame); - TEST_UNMAPPED(constFrame); - - QVERIFY(frame.map(QAbstractVideoBuffer::ReadOnly)); - TEST_MAPPED(frame, QAbstractVideoBuffer::ReadOnly); - TEST_MAPPED(constFrame, QAbstractVideoBuffer::ReadOnly); - frame.unmap(); - TEST_UNMAPPED(frame); - TEST_UNMAPPED(constFrame); - - QVERIFY(frame.map(QAbstractVideoBuffer::WriteOnly)); - TEST_MAPPED(frame, QAbstractVideoBuffer::WriteOnly); - TEST_MAPPED(constFrame, QAbstractVideoBuffer::WriteOnly); - frame.unmap(); - TEST_UNMAPPED(frame); - TEST_UNMAPPED(constFrame); - - QVERIFY(frame.map(QAbstractVideoBuffer::ReadWrite)); - TEST_MAPPED(frame, QAbstractVideoBuffer::ReadWrite); - TEST_MAPPED(constFrame, QAbstractVideoBuffer::ReadWrite); - frame.unmap(); - TEST_UNMAPPED(frame); - TEST_UNMAPPED(constFrame); -} - -void tst_QVideoFrame::isReadable() -{ - QVideoFrame frame(16384, QSize(64, 64), 256, QVideoFrame::Format_ARGB32); - - QVERIFY(!frame.isMapped()); - QVERIFY(!frame.isReadable()); - - QVERIFY(frame.map(QAbstractVideoBuffer::ReadOnly)); - QVERIFY(frame.isMapped()); - QVERIFY(frame.isReadable()); - frame.unmap(); - - QVERIFY(frame.map(QAbstractVideoBuffer::WriteOnly)); - QVERIFY(frame.isMapped()); - QVERIFY(!frame.isReadable()); - frame.unmap(); - - QVERIFY(frame.map(QAbstractVideoBuffer::ReadWrite)); - QVERIFY(frame.isMapped()); - QVERIFY(frame.isReadable()); - frame.unmap(); -} - -void tst_QVideoFrame::isWritable() -{ - QVideoFrame frame(16384, QSize(64, 64), 256, QVideoFrame::Format_ARGB32); - - QVERIFY(!frame.isMapped()); - QVERIFY(!frame.isWritable()); - - QVERIFY(frame.map(QAbstractVideoBuffer::ReadOnly)); - QVERIFY(frame.isMapped()); - QVERIFY(!frame.isWritable()); - frame.unmap(); - - QVERIFY(frame.map(QAbstractVideoBuffer::WriteOnly)); - QVERIFY(frame.isMapped()); - QVERIFY(frame.isWritable()); - frame.unmap(); - - QVERIFY(frame.map(QAbstractVideoBuffer::ReadWrite)); - QVERIFY(frame.isMapped()); - QVERIFY(frame.isWritable()); - frame.unmap(); -} - - -QTEST_MAIN(tst_QVideoFrame) - -#include "tst_qvideoframe.moc" |