Skip to content

Commit aeda8b2

Browse files
committed
HDR10Capture2019 1.9
AVI uncompressed 24bit / r210 / v210 playback
1 parent 270dc03 commit aeda8b2

13 files changed

+351
-54
lines changed

Common/MLAVICommon.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55

66
uint32_t MLStringToFourCC(const char* s);
77

8+
/// <summary>
9+
/// 画面表示のためFourCCを文字列にする。
10+
/// </summary>
811
const std::string MLFourCCtoString(uint32_t fourcc);
912

1013
enum MLAviImageFormat {
@@ -42,6 +45,9 @@ enum MLFOURCC {
4245
MLFOURCC_vids = 0x73646976,
4346
MLFOURCC_auds = 0x73647561,
4447
MLFOURCC_v210 = 0x30313276,
48+
MLFOURCC_r210 = 0x30313272,
49+
MLFOURCC_UYVY = 0x59565955,
50+
MLFOURCC_R12B = 0x42323152,
4551
MLFOURCC_AVIX = 0x58495641,
4652
MLFOURCC_movi = 0x69766f6d,
4753
MLFOURCC_00db = 0x62643030,
@@ -100,6 +106,9 @@ struct MLBitmapInfoHeader {
100106
int biWidth;
101107
int biHeight;
102108
short biPlanes;
109+
/// <summary>
110+
/// biBitCountは、画像の1ピクセルの占めるサイズでは必ずしも無い。
111+
/// </summary>
103112
short biBitCount;
104113

105114
uint32_t biCompression;

Common/MLAviCommon.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ uint32_t MLStringToFourCC(const char *s)
2020
return fcc;
2121
}
2222

23+
24+
2325
const std::string
2426
MLFourCCtoString(uint32_t fourcc)
2527
{
@@ -30,5 +32,15 @@ MLFourCCtoString(uint32_t fourcc)
3032
s[2] = (fourcc >> 16) & 0xff;
3133
s[3] = (fourcc >> 24) & 0xff;
3234

35+
for (int i = 0; i < 4; ++i) {
36+
if (s[i] < 0) {
37+
// ASCIIではない文字。
38+
s[i] = '?';
39+
} else if (s[i] < 0x20) {
40+
// 制御文字をスペースにする。
41+
s[i] = ' ';
42+
}
43+
}
44+
3345
return std::string(s);
3446
}

Common/MLAviWriter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -423,7 +423,7 @@ MLAviImageFormatToBiBitCount(MLAviImageFormat t)
423423
case MLIF_YUV422_v210:
424424
return 20;
425425
case MLIF_RGB10bit_r210:
426-
return 30; //< これが異なる。各ピクセルに要素xが2ビットを占める
426+
return 30; //< これが異なる。X2R10G10B10なので
427427
case MLIF_RGB12bit_R12B:
428428
return 36;
429429
default:

Common/MLConverter.cpp

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -351,11 +351,28 @@ MLConverter::R8G8B8ToB8G8R8A8_DIB(const uint8_t* pFrom, uint8_t* pTo, const int
351351
const uint8_t r = pFrom[posR + 0];
352352
const uint8_t g = pFrom[posR + 1];
353353
const uint8_t b = pFrom[posR + 2];
354-
const uint8_t a = alpha;
355354
pTo[posW + 0] = b;
356355
pTo[posW + 1] = g;
357356
pTo[posW + 2] = r;
358-
pTo[posW + 3] = a;
357+
pTo[posW + 3] = alpha;
358+
}
359+
}
360+
}
361+
362+
void
363+
MLConverter::B8G8R8DIBToR8G8B8A8(const uint8_t* pFrom, uint32_t* pTo, const int width, const int height, const uint8_t alpha)
364+
{
365+
#pragma omp parallel for
366+
for (int y = 0; y < height; ++y) {
367+
for (int x = 0; x < width; ++x) {
368+
const int posR = 3 * (x + y * width);
369+
// BMPは上下反転する。
370+
const int posW = x + (height - y - 1) * width;
371+
372+
const uint8_t b = pFrom[posR + 0];
373+
const uint8_t g = pFrom[posR + 1];
374+
const uint8_t r = pFrom[posR + 2];
375+
pTo[posW] = r + (g << 8) + (b << 16) + (alpha << 24);
359376
}
360377
}
361378
}
@@ -827,7 +844,7 @@ MLConverter::R16G16B16A16ToR210(const uint16_t* pFrom, uint32_t* pTo, const int
827844
#pragma omp parallel for
828845
for (int y = 0; y < height; ++y) {
829846
for (int x = 0; x < width; ++x) {
830-
const int posR = 4 * x + y * width;
847+
const int posR = 4 * (x + y * width);
831848
const int posW = x + y * width;
832849

833850
// quantize to 10bit

Common/MLConverter.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class MLConverter {
2525
/// </summary>
2626
static void R8G8B8ToB8G8R8_DIB(const uint8_t* pFrom, uint8_t* pTo, const int width, const int height);
2727
static void R8G8B8ToB8G8R8A8_DIB(const uint8_t* pFrom, uint8_t* pTo, const int width, const int height, const uint8_t alpha);
28+
static void B8G8R8DIBToR8G8B8A8(const uint8_t* pFrom, uint32_t* pTo, const int width, const int height, const uint8_t alpha);
2829

2930
/// <summary>
3031
/// bmdFormat8BitYUV UYVY ¨ DXGI_FORMAT_R8G8B8A8_UNORM

Common/MLImage2.h

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,19 +31,34 @@ struct MLImage2 {
3131

3232
/// <summary>
3333
/// new[]で確保して下さい。
34-
/// RGBAの順、ピクセル値を左から右、上から下に並べます。
3534
/// </summary>
3635
uint8_t *data = nullptr;
36+
3737
int bytes = 0;
3838
int width = 0;
3939
int height = 0;
4040
ImageFileFormatType imgFileFormat = IFFT_None;
4141
BitFormatType bitFormat = BFT_None;
4242
MLColorGamutType colorGamut = ML_CG_Rec709;
4343
GammaType gamma = MLG_G22;
44+
45+
/// <summary>
46+
/// ビットデプス。8bit, 10bit等。
47+
/// </summary>
4448
int originalBitDepth = 8;
49+
50+
/// <summary>
51+
/// チャンネル数。RGBのとき3、RGBAのとき4。
52+
/// </summary>
4553
int originalNumChannels = 3;
4654

55+
/// <summary>
56+
/// すべてのメンバ変数をセットします。
57+
/// </summary>
58+
/// <param name="aOriginalBitDepth">ビットデプス。8bit、10bit等。</param>
59+
/// <param name="aOriginalNumChannels">チャンネル数。RGBのとき3、RGBAのとき4。</param>
60+
/// <param name="aBytes">aDataのバイト数。</param>
61+
/// <param name="aData">画像が入っているバッファ。new[]で確保して渡します。</param>
4762
void Init(int aW, int aH, ImageFileFormatType iff, BitFormatType bf, MLColorGamutType cg, GammaType ga, int aOriginalBitDepth, int aOriginalNumChannels, int aBytes, uint8_t *aData) {
4863
data = aData;
4964
bytes = aBytes;

HDR10Capture2019/HDR10Capture.vcxproj

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,25 @@
1111
</ProjectConfiguration>
1212
</ItemGroup>
1313
<ItemGroup>
14+
<ClInclude Include="..\Common\MLAVICommon.h" />
15+
<ClInclude Include="..\Common\MLAviReader.h" />
16+
<ClInclude Include="..\Common\MLAviWriter.h" />
17+
<ClInclude Include="..\Common\MLBmpReader.h" />
18+
<ClInclude Include="..\Common\MLBmpWriter.h" />
19+
<ClInclude Include="..\Common\MLColorGamut.h" />
20+
<ClInclude Include="..\Common\MLConverter.h" />
21+
<ClInclude Include="..\Common\MLDX12.h" />
22+
<ClInclude Include="..\Common\MLDX12Common.h" />
1423
<ClInclude Include="..\Common\MLDX12Imgui2.h" />
24+
<ClInclude Include="..\Common\MLEnumToStr.h" />
25+
<ClInclude Include="..\Common\MLExrReader.h" />
26+
<ClInclude Include="..\Common\MLExrWriter.h" />
1527
<ClInclude Include="..\Common\MLImage2.h" />
28+
<ClInclude Include="..\Common\MLPngReader.h" />
29+
<ClInclude Include="..\Common\MLPngWriter.h" />
30+
<ClInclude Include="..\Common\MLSaveSettings.h" />
31+
<ClInclude Include="..\Common\MLVideoCapUser.h" />
32+
<ClInclude Include="..\Common\MLWinApp.h" />
1633
<ClInclude Include="MainApp.h" />
1734
<ClInclude Include="resource.h" />
1835
</ItemGroup>

HDR10Capture2019/HDR10Capture.vcxproj.filters

Lines changed: 54 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -87,15 +87,66 @@
8787
<ClInclude Include="resource.h">
8888
<Filter>Resources</Filter>
8989
</ClInclude>
90-
<ClInclude Include="MainApp.h">
91-
<Filter>Headers</Filter>
92-
</ClInclude>
9390
<ClInclude Include="..\Common\MLDX12Imgui2.h">
9491
<Filter>Common</Filter>
9592
</ClInclude>
9693
<ClInclude Include="..\Common\MLImage2.h">
9794
<Filter>Common</Filter>
9895
</ClInclude>
96+
<ClInclude Include="MainApp.h">
97+
<Filter>Sources</Filter>
98+
</ClInclude>
99+
<ClInclude Include="..\Common\MLAVICommon.h">
100+
<Filter>Common</Filter>
101+
</ClInclude>
102+
<ClInclude Include="..\Common\MLAviReader.h">
103+
<Filter>Common</Filter>
104+
</ClInclude>
105+
<ClInclude Include="..\Common\MLAviWriter.h">
106+
<Filter>Common</Filter>
107+
</ClInclude>
108+
<ClInclude Include="..\Common\MLBmpReader.h">
109+
<Filter>Common</Filter>
110+
</ClInclude>
111+
<ClInclude Include="..\Common\MLBmpWriter.h">
112+
<Filter>Common</Filter>
113+
</ClInclude>
114+
<ClInclude Include="..\Common\MLColorGamut.h">
115+
<Filter>Common</Filter>
116+
</ClInclude>
117+
<ClInclude Include="..\Common\MLConverter.h">
118+
<Filter>Common</Filter>
119+
</ClInclude>
120+
<ClInclude Include="..\Common\MLDX12.h">
121+
<Filter>Common</Filter>
122+
</ClInclude>
123+
<ClInclude Include="..\Common\MLDX12Common.h">
124+
<Filter>Common</Filter>
125+
</ClInclude>
126+
<ClInclude Include="..\Common\MLEnumToStr.h">
127+
<Filter>Common</Filter>
128+
</ClInclude>
129+
<ClInclude Include="..\Common\MLExrReader.h">
130+
<Filter>Common</Filter>
131+
</ClInclude>
132+
<ClInclude Include="..\Common\MLExrWriter.h">
133+
<Filter>Common</Filter>
134+
</ClInclude>
135+
<ClInclude Include="..\Common\MLPngReader.h">
136+
<Filter>Common</Filter>
137+
</ClInclude>
138+
<ClInclude Include="..\Common\MLPngWriter.h">
139+
<Filter>Common</Filter>
140+
</ClInclude>
141+
<ClInclude Include="..\Common\MLSaveSettings.h">
142+
<Filter>Common</Filter>
143+
</ClInclude>
144+
<ClInclude Include="..\Common\MLVideoCapUser.h">
145+
<Filter>Common</Filter>
146+
</ClInclude>
147+
<ClInclude Include="..\Common\MLWinApp.h">
148+
<Filter>Common</Filter>
149+
</ClInclude>
99150
</ItemGroup>
100151
<ItemGroup>
101152
<CustomBuild Include="shaderColorConvPS.hlsl">
@@ -109,9 +160,6 @@
109160
<Filter Include="Contrib">
110161
<UniqueIdentifier>{6c78ab83-29ec-4853-94a9-39285dcad4d6}</UniqueIdentifier>
111162
</Filter>
112-
<Filter Include="Headers">
113-
<UniqueIdentifier>{4f0913df-f4d8-4aaa-90d7-cfc1918a8742}</UniqueIdentifier>
114-
</Filter>
115163
<Filter Include="Sources">
116164
<UniqueIdentifier>{22278552-a3b8-4667-bd36-7a1d1f55143f}</UniqueIdentifier>
117165
</Filter>

0 commit comments

Comments
 (0)