Fix WAVEFORMATEX struct size (#5356)

* fix WAVEFORMATEX struct size
* fix size test for WAVEFORMATEX
* pack WAVEFORMATEXTENSIBLE
This commit is contained in:
David Holland
2025-06-18 12:25:09 +02:00
committed by GitHub
parent 12bd926f18
commit 0a45d4de0c
3 changed files with 9 additions and 4 deletions
+2 -2
View File
@@ -589,7 +589,7 @@ WAVE_FORMAT_FLAC :: 0xF1AC /* flac.sourceforge.net */
WAVE_FORMAT_EXTENSIBLE :: 0xFFFE /* Microsoft */ WAVE_FORMAT_EXTENSIBLE :: 0xFFFE /* Microsoft */
WAVEFORMATEX :: struct { WAVEFORMATEX :: struct #packed {
wFormatTag: WORD, wFormatTag: WORD,
nChannels: WORD, nChannels: WORD,
nSamplesPerSec: DWORD, nSamplesPerSec: DWORD,
@@ -603,7 +603,7 @@ LPCWAVEFORMATEX :: ^WAVEFORMATEX
// New wave format development should be based on the WAVEFORMATEXTENSIBLE structure. // New wave format development should be based on the WAVEFORMATEXTENSIBLE structure.
// WAVEFORMATEXTENSIBLE allows you to avoid having to register a new format tag with Microsoft. // WAVEFORMATEXTENSIBLE allows you to avoid having to register a new format tag with Microsoft.
// Simply define a new GUID value for the WAVEFORMATEXTENSIBLE.SubFormat field and use WAVE_FORMAT_EXTENSIBLE in the WAVEFORMATEXTENSIBLE.Format.wFormatTag field. // Simply define a new GUID value for the WAVEFORMATEXTENSIBLE.SubFormat field and use WAVE_FORMAT_EXTENSIBLE in the WAVEFORMATEXTENSIBLE.Format.wFormatTag field.
WAVEFORMATEXTENSIBLE :: struct { WAVEFORMATEXTENSIBLE :: struct #packed {
using Format: WAVEFORMATEX, using Format: WAVEFORMATEX,
Samples: struct #raw_union { Samples: struct #raw_union {
wValidBitsPerSample: WORD, /* bits of precision */ wValidBitsPerSample: WORD, /* bits of precision */
@@ -527,8 +527,10 @@ verify_winmm :: proc(t: ^testing.T) {
// mmsyscom.h // mmsyscom.h
expect_size(t, win32.MMVERSION, 4) expect_size(t, win32.MMVERSION, 4)
expect_size(t, win32.MMTIME, 12) expect_size(t, win32.MMTIME, 12)
// mmreg.h
expect_size(t, win32.WAVEFORMATEX, 18)
expect_size(t, win32.WAVEFORMATEXTENSIBLE, 40)
// mmeapi.h // mmeapi.h
expect_size(t, win32.WAVEFORMATEX, 20)
expect_size(t, win32.WAVEHDR, 48) expect_size(t, win32.WAVEHDR, 48)
expect_size(t, win32.WAVEINCAPSW, 80) expect_size(t, win32.WAVEINCAPSW, 80)
expect_size(t, win32.WAVEOUTCAPSW, 84) expect_size(t, win32.WAVEOUTCAPSW, 84)
+4 -1
View File
@@ -1,6 +1,7 @@
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <windows.h> #include <windows.h>
#include <timeapi.h> #include <timeapi.h>
#include <mmreg.h>
#include <mmeapi.h> #include <mmeapi.h>
#include <windns.h> #include <windns.h>
#include <commdlg.h> #include <commdlg.h>
@@ -702,8 +703,10 @@ static void verify_winmm(ofstream& out) {
test_proc_comment("mmsyscom.h"); test_proc_comment("mmsyscom.h");
expect_size(MMVERSION); expect_size(MMVERSION);
expect_size(MMTIME); expect_size(MMTIME);
test_proc_comment("mmeapi.h"); test_proc_comment("mmreg.h");
expect_size(WAVEFORMATEX); expect_size(WAVEFORMATEX);
expect_size(WAVEFORMATEXTENSIBLE);
test_proc_comment("mmeapi.h");
expect_size(WAVEHDR); expect_size(WAVEHDR);
expect_size(WAVEINCAPSW); expect_size(WAVEINCAPSW);
expect_size(WAVEOUTCAPSW); expect_size(WAVEOUTCAPSW);