headers: Add IAudioClient3 and IAudioAmbisonicsControl in AudioClient.idl.

Signed-off-by: Biswapriyo Nath <nathbappai@gmail.com>
Signed-off-by: Liu Hao <lh_mouse@126.com>
diff --git a/mingw-w64-headers/include/audioclient.idl b/mingw-w64-headers/include/audioclient.idl
index f7a0a66..73c2f9d 100644
--- a/mingw-w64-headers/include/audioclient.idl
+++ b/mingw-w64-headers/include/audioclient.idl
@@ -60,12 +60,26 @@
  AUDCLNT_BUFFERFLAGS_TIMESTAMP_ERROR = 0x4
 };
 
-typedef enum AUDCLNT_STREAMOPTIONS {
+typedef [v1_enum] enum AUDCLNT_STREAMOPTIONS {
   AUDCLNT_STREAMOPTIONS_NONE = 0x0,
   AUDCLNT_STREAMOPTIONS_RAW = 0x1,
   AUDCLNT_STREAMOPTIONS_MATCH_FORMAT = 0x2,
   AUDCLNT_STREAMOPTIONS_AMBISONICS = 0x4
 } AUDCLNT_STREAMOPTIONS;
+cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(AUDCLNT_STREAMOPTIONS);")
+
+typedef enum AMBISONICS_TYPE {
+  AMBISONICS_TYPE_FULL3D = 0x0
+} AMBISONICS_TYPE;
+
+typedef enum AMBISONICS_CHANNEL_ORDERING {
+  AMBISONICS_CHANNEL_ORDERING_ACN = 0x0
+} AMBISONICS_CHANNEL_ORDERING;
+
+typedef enum AMBISONICS_NORMALIZATION {
+  AMBISONICS_NORMALIZATION_SN3D = 0x0,
+  AMBISONICS_NORMALIZATION_N3D = 0x1
+} AMBISONICS_NORMALIZATION;
 
 cpp_quote("")
 typedef struct AudioClientProperties {
@@ -75,6 +89,21 @@
   AUDCLNT_STREAMOPTIONS Options;
 } AudioClientProperties;
 
+typedef struct AudioClient3ActivationParams {
+  GUID tracingContextId;
+} AudioClient3ActivationParams;
+
+typedef struct AMBISONICS_PARAMS {
+  UINT32 u32Size;
+  UINT32 u32Version;
+  AMBISONICS_TYPE u32Type;
+  AMBISONICS_CHANNEL_ORDERING u32ChannelOrdering;
+  AMBISONICS_NORMALIZATION u32Normalization;
+  UINT32 u32Order;
+  UINT32 u32NumChannels;
+  UINT32 *pu32ChannelMap;
+} AMBISONICS_PARAMS;
+
 cpp_quote("")
 [object, local, uuid (1cb9ad4c-DBFA-4c32-B178-C2F568A703B2), pointer_default (unique)]
 interface IAudioClient : IUnknown {
@@ -100,6 +129,13 @@
   HRESULT GetBufferSizeLimits ([in] const WAVEFORMATEX *pFormat,[in] WINBOOL bEventDriven,[in] REFERENCE_TIME *phnsMinBufferDuration,[in] REFERENCE_TIME *phnsMaxBufferDuration);
 }
 
+[object, local, uuid (7ed4ee07-8e67-4cd4-8c1a-2b7a5987ad42), pointer_default (unique)]
+interface IAudioClient3 : IAudioClient2 {
+  HRESULT GetSharedModeEnginePeriod ([in] const WAVEFORMATEX *pFormat, [out] UINT32 *pDefaultPeriodInFrames, [out] UINT32 *pFundamentalPeriodInFrames, [out] UINT32 *pMinPeriodInFrames, [out] UINT32 *pMaxPeriodInFrames);
+  HRESULT GetCurrentSharedModeEnginePeriod ([out, unique] WAVEFORMATEX **ppFormat, [out] UINT32 *pCurrentPeriodInFrames);
+  HRESULT InitializeSharedAudioStream ([in] DWORD StreamFlags, [in] UINT32 PeriodInFrames, [in] const WAVEFORMATEX *pFormat, [in] LPCGUID AudioSessionGuid);
+}
+
 cpp_quote("")
 [object, local, uuid (F294ACFC-3146-4483-A7BF-ADDCA7C260E2), helpstring ("IAudioRenderClient Interface"), pointer_default (unique)]
 interface IAudioRenderClient : IUnknown {
@@ -162,6 +198,14 @@
   HRESULT GetAllVolumes ([in] UINT32 dwCount,[out, size_is (dwCount),] float *pfVolumes);
 }
 
+[object, local, uuid (28724c91-df35-4856-9f76-d6a26413f3df), pointer_default (unique)]
+interface IAudioAmbisonicsControl : IUnknown {
+    HRESULT SetData([in] const AMBISONICS_PARAMS *pAmbisonicsParams, [in] UINT32 cbAmbisonicsParams);
+    HRESULT SetHeadTracking([in] WINBOOL bEnableHeadTracking);
+    HRESULT GetHeadTracking([out] WINBOOL *pbEnableHeadTracking);
+    HRESULT SetRotation([in] float X, [in] float Y, [in] float Z, [in] float W);
+}
+
 cpp_quote("")
 [object, local, uuid (1c158861-B533-4b30-B1CF-E853E51C59B8), pointer_default (unique)]
 interface IChannelAudioVolume : IUnknown {
@@ -208,6 +252,11 @@
 cpp_quote("#define AUDCLNT_E_OFFLOAD_MODE_ONLY AUDCLNT_ERR(0x24)")
 cpp_quote("#define AUDCLNT_E_NONOFFLOAD_MODE_ONLY AUDCLNT_ERR(0x25)")
 cpp_quote("#define AUDCLNT_E_RESOURCES_INVALIDATED AUDCLNT_ERR(0x26)")
+cpp_quote("#define AUDCLNT_E_RAW_MODE_UNSUPPORTED AUDCLNT_ERR(0x027)")
+cpp_quote("#define AUDCLNT_E_ENGINE_PERIODICITY_LOCKED AUDCLNT_ERR(0x028)")
+cpp_quote("#define AUDCLNT_E_ENGINE_FORMAT_LOCKED AUDCLNT_ERR(0x029)")
+cpp_quote("#define AUDCLNT_E_HEADTRACKING_ENABLED AUDCLNT_ERR(0x030)")
+cpp_quote("#define AUDCLNT_E_HEADTRACKING_UNSUPPORTED AUDCLNT_ERR(0x040)")
 cpp_quote("#define AUDCLNT_S_BUFFER_EMPTY AUDCLNT_SUCCESS(0x1)")
 cpp_quote("#define AUDCLNT_S_THREAD_ALREADY_REGISTERED AUDCLNT_SUCCESS(0x2)")
 cpp_quote("#define AUDCLNT_S_POSITION_STALLED AUDCLNT_SUCCESS(0x3)")