File: PixelFormatRGBGuessTest.cpp

package info (click to toggle)
yuview 2.14-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 12,712 kB
  • sloc: cpp: 62,506; python: 788; xml: 54; makefile: 6
file content (157 lines) | stat: -rw-r--r-- 7,119 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#include <QtTest>

#include <video/rgb/PixelFormatRGBGuess.h>

#include <iostream>

using namespace video;

class PixelFormatRGBGuessTest : public QObject
{
  Q_OBJECT

public:
  PixelFormatRGBGuessTest();
  ~PixelFormatRGBGuessTest();

private slots:
  void testFormatGuessFromFilename_data();
  void testFormatGuessFromFilename();
};

PixelFormatRGBGuessTest::PixelFormatRGBGuessTest()
{
}

PixelFormatRGBGuessTest::~PixelFormatRGBGuessTest()
{
}

void PixelFormatRGBGuessTest::testFormatGuessFromFilename_data()
{
  QTest::addColumn<QString>("filename");
  QTest::addColumn<unsigned>("fileSize");
  QTest::addColumn<unsigned>("width");
  QTest::addColumn<unsigned>("height");
  QTest::addColumn<QString>("expectedFormatName");

  const auto BytesNoAlpha   = 1920u * 1080 * 12 * 3; // 12 frames RGB
  const auto NotEnoughBytes = 22u;
  const auto UnfittingBytes = 1920u * 1080 * 5;

  QTest::newRow("testNoIndicatorInName") << "noIndicatorHere.yuv" << 0u << 0u << 0u << "RGB 8bit";
  QTest::newRow("testResolutionOnly")
      << "something_1920x1080.yuv" << BytesNoAlpha << 1920u << 1080u << "RGB 8bit";

  // No Alpha
  QTest::newRow("testFormatsChannelOrderRGB")
      << "something_1920x1080_rgb.yuv" << BytesNoAlpha << 1920u << 1080u << "RGB 8bit";
  QTest::newRow("testFormatsChannelOrderRBG")
      << "something_1920x1080_rbg.yuv" << BytesNoAlpha << 1920u << 1080u << "RBG 8bit";
  QTest::newRow("testFormatsChannelOrderGRB")
      << "something_1920x1080_grb.yuv" << BytesNoAlpha << 1920u << 1080u << "GRB 8bit";
  QTest::newRow("testFormatsChannelOrderGBR")
      << "something_1920x1080_gbr.yuv" << BytesNoAlpha << 1920u << 1080u << "GBR 8bit";
  QTest::newRow("testFormatsChannelOrderBRG")
      << "something_1920x1080_brg.yuv" << BytesNoAlpha << 1920u << 1080u << "BRG 8bit";
  QTest::newRow("testFormatsChannelOrderBGR")
      << "something_1920x1080_bgr.yuv" << BytesNoAlpha << 1920u << 1080u << "BGR 8bit";

  // Alpha First
  QTest::newRow("testFormatsChannelOrderARGB")
      << "something_1920x1080_argb.yuv" << BytesNoAlpha << 1920u << 1080u << "ARGB 8bit";
  QTest::newRow("testFormatsChannelOrderARBG")
      << "something_1920x1080_arbg.yuv" << BytesNoAlpha << 1920u << 1080u << "ARBG 8bit";
  QTest::newRow("testFormatsChannelOrderAGRB")
      << "something_1920x1080_agrb.yuv" << BytesNoAlpha << 1920u << 1080u << "AGRB 8bit";
  QTest::newRow("testFormatsChannelOrderAGBR")
      << "something_1920x1080_agbr.yuv" << BytesNoAlpha << 1920u << 1080u << "AGBR 8bit";
  QTest::newRow("testFormatsChannelOrderABRG")
      << "something_1920x1080_abrg.yuv" << BytesNoAlpha << 1920u << 1080u << "ABRG 8bit";
  QTest::newRow("testFormatsChannelOrderABGR")
      << "something_1920x1080_abgr.yuv" << BytesNoAlpha << 1920u << 1080u << "ABGR 8bit";

  // Alpha Last
  QTest::newRow("testFormatsChannelOrderRGBA")
      << "something_1920x1080_rgba.yuv" << BytesNoAlpha << 1920u << 1080u << "RGBA 8bit";
  QTest::newRow("testFormatsChannelOrderRBGA")
      << "something_1920x1080_rbga.yuv" << BytesNoAlpha << 1920u << 1080u << "RBGA 8bit";
  QTest::newRow("testFormatsChannelOrderGRBA")
      << "something_1920x1080_grba.yuv" << BytesNoAlpha << 1920u << 1080u << "GRBA 8bit";
  QTest::newRow("testFormatsChannelOrderGBRA")
      << "something_1920x1080_gbra.yuv" << BytesNoAlpha << 1920u << 1080u << "GBRA 8bit";
  QTest::newRow("testFormatsChannelOrderBRGA")
      << "something_1920x1080_brga.yuv" << BytesNoAlpha << 1920u << 1080u << "BRGA 8bit";
  QTest::newRow("testFormatsChannelOrderBGRA")
      << "something_1920x1080_bgra.yuv" << BytesNoAlpha << 1920u << 1080u << "BGRA 8bit";

  // Bit dephts
  QTest::newRow("testFormatsBitDepth10")
      << "something_1920x1080_rgb10.yuv" << BytesNoAlpha << 1920u << 1080u << "RGB 10bit";
  QTest::newRow("testFormatsBitDepth12")
      << "something_1920x1080_rgb12.yuv" << BytesNoAlpha << 1920u << 1080u << "RGB 12bit";
  QTest::newRow("testFormatsBitDepth16")
      << "something_1920x1080_rgb16.yuv" << BytesNoAlpha << 1920u << 1080u << "RGB 16bit";
  QTest::newRow("testFormatsBitDepth48")
      << "something_1920x1080_rgb48.yuv" << BytesNoAlpha << 1920u << 1080u << "RGB 16bit";
  QTest::newRow("testFormatsBitDepth64")
      << "something_1920x1080_rgb64.yuv" << BytesNoAlpha << 1920u << 1080u << "RGB 16bit";
  QTest::newRow("testFormatsBitDepth11ShouldFail")
      << "something_1920x1080_rgb11.yuv" << BytesNoAlpha << 1920u << 1080u << "RGB 8bit";

  // Endianness
  QTest::newRow("testFormatsEndianness1")
      << "something_1920x1080_rgb8le.yuv" << BytesNoAlpha << 1920u << 1080u << "RGB 8bit";
  QTest::newRow("testFormatsEndianness2")
      << "something_1920x1080_rgb8be.yuv" << BytesNoAlpha << 1920u << 1080u << "RGB 8bit";
  QTest::newRow("testFormatsEndianness3")
      << "something_1920x1080_rgb10le.yuv" << BytesNoAlpha << 1920u << 1080u << "RGB 10bit";
  QTest::newRow("testFormatsEndianness4")
      << "something_1920x1080_rgb10be.yuv" << BytesNoAlpha << 1920u << 1080u << "RGB 10bit BE";
  QTest::newRow("testFormatsEndianness5")
      << "something_1920x1080_rgb16be.yuv" << BytesNoAlpha << 1920u << 1080u << "RGB 16bit BE";

  // DataLayout
  QTest::newRow("testFormatsDataLayout1")
      << "something_1920x1080_rgb_packed.yuv" << BytesNoAlpha << 1920u << 1080u << "RGB 8bit";
  QTest::newRow("testFormatsDataLayout2") << "something_1920x1080_rgb_planar.yuv" << BytesNoAlpha
                                          << 1920u << 1080u << "RGB 8bit planar";
  QTest::newRow("testFormatsDataLayout3") << "something_1920x1080_rgb10le_planar.yuv"
                                          << BytesNoAlpha << 1920u << 1080u << "RGB 10bit planar";
  QTest::newRow("testFormatsDataLayout4")
      << "something_1920x1080_rgb10be_planar.yuv" << BytesNoAlpha << 1920u << 1080u
      << "RGB 10bit planar BE";
  QTest::newRow("testFormatsDataLayout5") << "something_1920x1080_rgb16_planar.yuv" << BytesNoAlpha
                                          << 1920u << 1080u << "RGB 16bit planar";
  QTest::newRow("testFormatsDataLayout6")
      << "something_1920x1080_rgb16be_planar.yuv" << BytesNoAlpha << 1920u << 1080u
      << "RGB 16bit planar BE";

  // File size check
  QTest::newRow("testFormatsFileSizeCheck1")
      << "something_1920x1080_rgb10.yuv" << NotEnoughBytes << 1920u << 1080u << "RGB 8bit";
  QTest::newRow("testFormatsFileSizeCheck2")
      << "something_1920x1080_rgb16be.yuv" << NotEnoughBytes << 1920u << 1080u << "RGB 8bit";
  QTest::newRow("testFormatsFileSizeCheck3")
      << "something_1920x1080_rgb16be.yuv" << UnfittingBytes << 1920u << 1080u << "RGB 8bit";
}

void PixelFormatRGBGuessTest::testFormatGuessFromFilename()
{
  QFETCH(QString, filename);
  QFETCH(unsigned, fileSize);
  QFETCH(unsigned, width);
  QFETCH(unsigned, height);
  QFETCH(QString, expectedFormatName);

  QFileInfo fileInfo(filename);
  auto      fmt = video::rgb::guessFormatFromSizeAndName(fileInfo, Size(width, height), fileSize);
  auto      fmtName = fmt.getName();

  QVERIFY(fmt.isValid());
  QCOMPARE(fmtName, expectedFormatName.toStdString());
}

QTEST_MAIN(PixelFormatRGBGuessTest)

#include "PixelFormatRGBGuessTest.moc"