From 4d69c88514c08448eec49b950f2d1853d9895394 Mon Sep 17 00:00:00 2001
From: Vijay Kiran Kamuju <infyquest@gmail.com>
Date: Fri, 20 Mar 2020 13:37:35 +0100
Subject: [PATCH v2] include: Add missing structs and defines for xact3wb.h

Signed-off-by: Vijay Kiran Kamuju <infyquest@gmail.com>
---
 include/xact3wb.h | 93 +++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 89 insertions(+), 4 deletions(-)

diff --git a/include/xact3wb.h b/include/xact3wb.h
index b4c5a53d40..d9567fba37 100644
--- a/include/xact3wb.h
+++ b/include/xact3wb.h
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2020 Alistair Leslie-Hughes
+ * Copyright (c) 2020 Vijay Kiran Kamuju
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -18,6 +19,52 @@
 #ifndef __XACT3WB_H__
 #define __XACT3WB_H__
 
+#include <pshpack1.h>
+
+typedef DWORD WAVEBANKOFFSET;
+
+#define WAVEBANK_HEADER_SIGNATURE 0x44424E57
+#define WAVEBANK_HEADER_VERSION   44
+#define WAVEBANK_BANKNAME_LENGTH  64
+#define WAVEBANK_ENTRYNAME_LENGTH 64
+
+#define WAVEBANK_MAX_DATA_SEGMENT_SIZE     0xffffffff
+#define WAVEBANK_COMPACT_DATA_SEGMENT_SIZE 0x001fffff
+
+#define WAVEBANK_TYPE_BUFFER    0x00000000
+#define WAVEBANK_TYPE_STREAMING 0x00000001
+#define WAVEBANK_TYPE_MASK      0x00000001
+
+#define WAVEBANK_FLAGS_ENTRYNAMES    0x00010000
+#define WAVEBANK_FLAGS_COMPACT       0x00020000
+#define WAVEBANK_FLAGS_SYNC_DISABLED 0x00040000
+#define WAVEBANK_FLAGS_SEEKTABLES    0x00080000
+#define WAVEBANK_FLAGS_MASK          0x000F0000
+
+#define WAVEBANK_DVD_SECTOR_SIZE 2048
+#define WAVEBANK_DVD_BLOCK_SIZE  (WAVEBANK_DVD_SECTOR_SIZE * 16)
+#define WAVEBANK_ALIGNMENT_MIN   4
+#define WAVEBANK_ALIGNMENT_DVD   WAVEBANK_DVD_SECTOR_SIZE
+
+typedef enum WAVEBANKSEGIDX
+{
+    WAVEBANK_SEGIDX_BANKDATA = 0,
+    WAVEBANK_SEGIDX_ENTRYMETADATA,
+    WAVEBANK_SEGIDX_SEEKTABLES,
+    WAVEBANK_SEGIDX_ENTRYNAMES,
+    WAVEBANK_SEGIDX_ENTRYWAVEDATA,
+    WAVEBANK_SEGIDX_COUNT
+} WAVEBANKSEGIDX, *LPWAVEBANKSEGIDX;
+typedef const WAVEBANKSEGIDX *LPCWAVEBANKSEGIDX;
+
+#define WAVEBANKMINIFORMAT_TAG_PCM   0x0
+#define WAVEBANKMINIFORMAT_TAG_XMA   0x1
+#define WAVEBANKMINIFORMAT_TAG_ADPCM 0x2
+#define WAVEBANKMINIFORMAT_TAG_WMA   0x3
+
+#define WAVEBANKMINIFORMAT_BITDEPTH_8  0x0
+#define WAVEBANKMINIFORMAT_BITDEPTH_16 0x1
+
 typedef union WAVEBANKMINIWAVEFORMAT
 {
     struct
@@ -29,19 +76,34 @@ typedef union WAVEBANKMINIWAVEFORMAT
         DWORD wBitsPerSample :  1;
     } DUMMYSTRUCTNAME;
     DWORD dwValue;
-} WAVEBANKMINIWAVEFORMAT;
+} WAVEBANKMINIWAVEFORMAT, *LPWAVEBANKMINIWAVEFORMAT;
+typedef const WAVEBANKMINIWAVEFORMAT *LPCWAVEBANKMINIWAVEFORMAT;
 
 typedef struct WAVEBANKREGION
 {
     DWORD dwOffset;
     DWORD dwLength;
-} WAVEBANKREGION;
+} WAVEBANKREGION, *LPWAVEBANKREGION;
+typedef const WAVEBANKREGION *LPCWAVEBANKREGION;
 
 typedef struct WAVEBANKSAMPLEREGION
 {
     DWORD dwStartSample;
     DWORD dwTotalSamples;
-} WAVEBANKSAMPLEREGION;
+} WAVEBANKSAMPLEREGION, *LPWAVEBANKSAMPLEREGION;
+typedef const WAVEBANKSAMPLEREGION *LPCWAVEBANKSAMPLEREGION;
+
+typedef struct WAVEBANKHEADER
+{
+    DWORD dwSignature;
+    DWORD dwVersion;
+    DWORD dwHeaderVersion;
+    WAVEBANKREGION Segments[WAVEBANK_SEGIDX_COUNT];
+} WAVEBANKHEADER, *LPWAVEBANKHEADER;
+typedef const WAVEBANKHEADER *LPCWAVEBANKHEADER;
+
+#define WAVEBANKENTRY_XMASTREAMS_MAX  3
+#define WAVEBANKENTRY_XMACHANNELS_MAX 6
 
 typedef struct WAVEBANKENTRY
 {
@@ -58,6 +120,29 @@ typedef struct WAVEBANKENTRY
     WAVEBANKMINIWAVEFORMAT Format;
     WAVEBANKREGION PlayRegion;
     WAVEBANKSAMPLEREGION LoopRegion;
-} WAVEBANKENTRY;
+} WAVEBANKENTRY, *LPWAVEBANKENTRY;
+typedef const WAVEBANKENTRY *LPCWAVEBANKENTRY;
+
+typedef struct WAVEBANKENTRYCOMPACT
+{
+    DWORD dwOffset         : 21;
+    DWORD dwLengthDeviation : 11;
+} WAVEBANKENTRYCOMPACT, *LPWAVEBANKENTRYCOMPACT;
+typedef const WAVEBANKENTRYCOMPACT *LPCWAVEBANKENTRYCOMPACT;
+
+typedef struct WAVEBANKDATA
+{
+    DWORD dwFlags;
+    DWORD dwEntryCount;
+    CHAR  szBankName[WAVEBANK_BANKNAME_LENGTH];
+    DWORD dwEntryMetaDataElementSize;
+    DWORD dwEntryNameElementSize;
+    DWORD dwAlignment;
+    WAVEBANKMINIFORMAT CompactFormat;
+    FileTime BuildTime;
+} WAVEBANKDATA, *LPWAVEBANKDATA;
+typedef const WAVEBANKDATA *LPCWAVEBANKDATA;
+
+#include <poppack.h>
 
 #endif /* __XACT3WB_H__ */
-- 
2.25.2

