diff options
| author | Vincent Billet <billet.vincent@free.fr> | 2025-05-22 12:15:16 +0200 |
|---|---|---|
| committer | Vincent Billet <billet.vincent@free.fr> | 2025-05-22 12:15:16 +0200 |
| commit | 1ed05c2498325c97fd6d2856a6a190ab7e5820fc (patch) | |
| tree | a57b7b99312a47549bc086a9efea725a21fe0d1e /core/sys/windows | |
| parent | 240d45201d28b3652fee6792e18e2df64ebfb1e3 (diff) | |
Retracted some winmm changes
Diffstat (limited to 'core/sys/windows')
| -rw-r--r-- | core/sys/windows/winmm.odin | 209 |
1 files changed, 0 insertions, 209 deletions
diff --git a/core/sys/windows/winmm.odin b/core/sys/windows/winmm.odin index f09b75d07..1d3ee5daa 100644 --- a/core/sys/windows/winmm.odin +++ b/core/sys/windows/winmm.odin @@ -614,128 +614,6 @@ WAVEFORMATEXTENSIBLE :: struct { SubFormat: GUID, } -MPEGLAYER3_WFX_EXTRA_BYTES :: 12 -// MPEG Layer3 WAVEFORMATEX structure -MPEGLAYER3WAVEFORMAT :: struct { - using wfx: WAVEFORMATEX, - wID: WORD, - fdwFlags: DWORD, - nBlockSize: WORD, - nFramesPerBlock: WORD, - nCodecDelay: WORD, -} -LPMPEGLAYER3WAVEFORMAT :: ^MPEGLAYER3WAVEFORMAT - -MPEGLAYER3_ID_UNKNOWN :: 0 -MPEGLAYER3_ID_MPEG :: 1 -MPEGLAYER3_ID_CONSTANTFRAMESIZE :: 2 - -MPEGLAYER3_FLAG_PADDING_ISO :: 0x00000000 -MPEGLAYER3_FLAG_PADDING_ON :: 0x00000001 -MPEGLAYER3_FLAG_PADDING_OFF :: 0x00000002 - -/* - "MPEG-2" in the comments below refers to ISO/IEC 13818-7 (MPEG-2 AAC spec). - "MPEG-4" in the comments below refers to ISO/IEC 14496-3 (MPEG-4 Audio spec). - - The following defines the format block to be used for MPEG-2 AAC or MPEG-4 HE-AAC v1/v2 streams. - When setting media type attributes in Media Foundation (MF) objects, this will appear in conjunction with major type MFMediaType_Audio and sub type MFAudioFormat_AAC (=MEDIASUBTYPE_MPEG_HEAAC). - The format block structure HEAACWAVEFORMAT is defined below. It starts with the structure HEAACWAVEINFO (which is an extension of WAVEFORMATEX), followed by AudioSpecificConfig() as defined by ISO/IEC 14496-3 (MPEG-4 audio). - Since the length of AudioSpecificConfig() may vary from one stream to another, this is a variable size format block. - - The WAVEFORMATEX fields describe the properties of the core AAC stream, without SBR/PS extensions (if exists). This is the description of the WAVEFORMATEX fields: - - wfx.wFormatTag - Set this to WAVE_FORMAT_MPEG_HEAAC (0x1610). - - wfx.nChannels - Total number of channels in core AAC stream (including LFE if exists). - This might be different than the decoded number of channels if the MPEG-4 Parametric Stereo (PS) tool exists. If unknown, set to zero. - - wfx.nSamplesPerSec - Sampling rate of core AAC stream. This will be one of the 12 supported sampling rate between 8000 and 96000 Hz, as defined in MPEG-2. - This might be different than the decoded sampling rate if the MPEG-4 Spectral Band Replication (SBR) tool exists. - If not know in advance, the sampling rate can be extracted from: - - the 4-bit sampling_frequency_index field in adts_fixed_header(), or - - program_config_element() in adif_header for MPEG-2 streams, or - - the 4-bit samplingFrequencyIndex field in AudioSpecificConfig() for MPEG-4 streams. - - wfx.nAvgBytesPerSec - The average bytes per second calculated based on the average bit rate of the compressed stream. - This value may be used by parsers to seek into a particular time offset in the stream. It may also be used by applications to determine roughly how much buffer length to allocate. - If this is not known in advance, this value can be estimated by parsing some (or all) of the compressed HE-AAC frames and calculating bit rate based on average compressed frame size. - If unknown, set to zero. - - wfx.nBlockAlign - Set this to 1. - - wfx.wBitsPerSample - Desired bit depth of the decoded PCM. If unknown, set to zero. - - wfx.cbSize - Set this to 12 (=sizeof(HEAACWAVEINFO)-sizeof(WAVEFORMATEX)) plus the size of AudioSpecificConfig() in bytes. - - =================================== - -How do we parse this format block? assume pbBuff is the address of the first byte in the format block. We do the following: - -pwfInfo := cast(^HEAACWAVEINFO)pbBuff - -if pwfInfo.wStructType == 0 { - pwf := cast(^HEAACWAVEFORMAT)pbBuff - - // All HEAACWAVEFORMAT fields can now be accessed through pwf - // To parse AudioSpecificConfig(), write a function such as - // ParseAudioSpecificConfig :: proc(pbASC: ^BYTE, dwASCLen: DWORD), - // and call: - - dwASCLen: DWORD = pwf.wfInfo.wfx.cbSize - size_of(HEAACWAVEINFO) + size_of(WAVEFORMATEX) - - ParseAudioSpecificConfig(pwf.pbAudioSpecificConfig, dwASCLen) -} else { - // Reserved -} -*/ - -// This structure has a size of 30 bytes -HEAACWAVEINFO :: struct { - // Defines core AAC properties. See description above. WAVEFORMATEX is of size 18 bytes. - using wfx: WAVEFORMATEX, - - // Defines the payload type - // 0-RAW. The stream contains raw_data_block() elements only. - // 1-ADTS. The stream contains an adts_sequence(), as defined by MPEG-2. - // 2-ADIF. The stream contains an adif_sequence(), as defined by MPEG-2. - // 3-LOAS. The stream contains an MPEG-4 audio transport stream with a synchronization layer LOAS and a multiplex layer LATM. - // All other codes are reserved. - wPayloadType: WORD, - - // This is the 8-bit field audioProfileLevelIndication available in the MPEG-4 object descriptor. - // It is an indication (as defined in MPEG-4 audio) of the audio profile and level required to process the content associated with this stream. - // For example values 0x28-0x2B correspond to AAC Profile, values 0x2C-0x2F correspond to HE-AAC profile and 0x30-0x33 for HE-AAC v2 profile. - // If unknown, set to zero or 0xFE ("no audio profile specified"). - wAudioProfileLevelIndication: WORD, - - // Defines the data that follows this structure. Currently only one data type is supported: - // 0- AudioSpecificConfig() (as defined by MPEG-4 Audio, ISO/IEC 14496-3) will follow this structure. - // wfx.cbSize will indicate the total length including AudioSpecificConfig(). - // Use HEAACWAVEFORMAT to gain easy access to the address of the first byte of AudioSpecificConfig() for parsing. - // Typical values for the size of AudioSpecificConfig (ASC) are: - // - 2 bytes for AAC or HE-AAC v1/v2 with implicit signaling of SBR, - // - 5 bytes for HE-AAC v1 with explicit signaling of SBR, - // - 7 bytes for HE-AAC v2 with explicit signaling of SBR and PS. - // The size may be longer than 7 bytes if the 4-bit channelConfiguration field in ASC is zero, which means program_config_element() is present in ASC. - // All other codes are reserved. - wStructType: WORD, - - // Set these to zero - wReserved1: WORD, - dwReserved2: DWORD, -} -LPHEAACWAVEINFO :: ^HEAACWAVEINFO - -// This structure describes the format block for wStructType=0 -// This structure has a size of 31 bytes -HEAACWAVEFORMAT :: struct { - using wfInfo: HEAACWAVEINFO, - pbAudioSpecificConfig: [1]BYTE, // First byte of AudioSpecificConfig() -} -LPHEAACWAVEFORMAT :: ^HEAACWAVEFORMAT - - WAVEHDR :: struct { lpData: LPSTR, /* pointer to locked data buffer */ dwBufferLength: DWORD, /* length of data buffer */ @@ -824,90 +702,3 @@ CALLBACK_TASK :: 0x00020000 /* dwCallback is a HTASK */ CALLBACK_FUNCTION :: 0x00030000 /* dwCallback is a FARPROC */ CALLBACK_THREAD :: CALLBACK_TASK /* thread ID replaces 16 bit task */ CALLBACK_EVENT :: 0x00050000 /* dwCallback is an EVENT Handle */ - - -// Description: Type definitions used by the audio session manager RPC/COM interfaces - -//------------------------------------------------------------------------- -// Description: AudioClient share mode -// SHARED - The device will be opened in shared mode and use the WAS format. -// EXCLUSIVE - The device will be opened in exclusive mode and use the application specified format. -AUDCLNT_SHAREMODE :: enum i32 { - SHARED, - EXCLUSIVE, -} - -//------------------------------------------------------------------------- -// Description: Audio stream categories -// ForegroundOnlyMedia - (deprecated for Win10) Music, Streaming audio -// BackgroundCapableMedia - (deprecated for Win10) Video with audio -// Communications - VOIP, chat, phone call -// Alerts - Alarm, Ring tones -// SoundEffects - Sound effects, clicks, dings -// GameEffects - Game sound effects -// GameMedia - Background audio for games -// GameChat - In game player chat -// Speech - Speech recognition -// Media - Music, Streaming audio -// Movie - Video with audio -// FarFieldSpeech - Capture of far field speech -// UniformSpeech - Uniform, device agnostic speech processing -// VoiceTyping - Dictation, typing by voice -// Other - All other streams (default) -AUDIO_STREAM_CATEGORY :: enum i32 { - //ForegroundOnlyMedia = 1, - //BackgroundCapableMedia = 2, - Communications = 3, - Alerts = 4, - SoundEffects = 5, - GameEffects = 6, - GameMedia = 7, - GameChat = 8, - Speech = 9, - Movie = 10, - Media = 11, - FarFieldSpeech = 12, - UniformSpeech = 13, - VoiceTyping = 14, - Other = 0, -} - -//------------------------------------------------------------------------- -// Description: AudioClient stream flags -// Can be a combination of AUDCLNT_STREAMFLAGS and AUDCLNT_SYSFXFLAGS: -// AUDCLNT_STREAMFLAGS (this group of flags uses the high word, w/exception of high-bit which is reserved, 0x7FFF0000): -// AUDCLNT_STREAMFLAGS_CROSSPROCESS - Audio policy control for this stream will be shared with with other process sessions that use the same audio session GUID. -// AUDCLNT_STREAMFLAGS_LOOPBACK - Initializes a renderer endpoint for a loopback audio application. In this mode, a capture stream will be opened on the specified renderer endpoint. Shared mode and a renderer endpoint is required. -// Otherwise the IAudioClient.Initialize call will fail. If the initialize is successful, a capture stream will be available from the IAudioClient object. -// AUDCLNT_STREAMFLAGS_EVENTCALLBACK - An exclusive mode client will supply an event handle that will be signaled when an IRP completes (or a waveRT buffer completes) telling it to fill the next buffer -// AUDCLNT_STREAMFLAGS_NOPERSIST - Session state will not be persisted -// AUDCLNT_STREAMFLAGS_RATEADJUST - The sample rate of the stream is adjusted to a rate specified by an application. -// AUDCLNT_STREAMFLAGS_SRC_DEFAULT_QUALITY - When used with AUDCLNT_STREAMFLAGS_AUTOCONVERTPCM, a sample rate converter with better quality than the default conversion but with a higher performance cost is used. -// This should be used if the audio is ultimately intended to be heard by humans as opposed to other scenarios such as pumping silence or populating a meter. -// AUDCLNT_STREAMFLAGS_AUTOCONVERTPCM - A channel matrixer and a sample rate converter are inserted as necessary to convert between the uncompressed format supplied to IAudioClient.Initialize and the audio engine mix format. -// AUDCLNT_SESSIONFLAGS_EXPIREWHENUNOWNED - Session expires when there are no streams and no owning session controls. -// AUDCLNT_SESSIONFLAGS_DISPLAY_HIDE - Don't show volume control in the Volume Mixer. -// AUDCLNT_SESSIONFLAGS_DISPLAY_HIDEWHENEXPIRED - Don't show volume control in the Volume Mixer after the session expires. -// AUDCLNT_SYSFXFLAGS (these flags use low word 0x0000FFFF): -// none defined currently -AUDCLNT_STREAMFLAGS_CROSSPROCESS :: 0x00010000 -AUDCLNT_STREAMFLAGS_LOOPBACK :: 0x00020000 -AUDCLNT_STREAMFLAGS_EVENTCALLBACK :: 0x00040000 -AUDCLNT_STREAMFLAGS_NOPERSIST :: 0x00080000 -AUDCLNT_STREAMFLAGS_RATEADJUST :: 0x00100000 -AUDCLNT_STREAMFLAGS_SRC_DEFAULT_QUALITY :: 0x08000000 -AUDCLNT_STREAMFLAGS_AUTOCONVERTPCM :: 0x80000000 -AUDCLNT_SESSIONFLAGS_EXPIREWHENUNOWNED :: 0x10000000 -AUDCLNT_SESSIONFLAGS_DISPLAY_HIDE :: 0x20000000 -AUDCLNT_SESSIONFLAGS_DISPLAY_HIDEWHENEXPIRED :: 0x40000000 - -//------------------------------------------------------------------------- -// Description: AudioSession State. -// AudioSessionStateInactive - The session has no active audio streams. -// AudioSessionStateActive - The session has active audio streams. -// AudioSessionStateExpired - The session is dormant. -AudioSessionState :: enum i32 { - Inactive = 0, - Active = 1, - Expired = 2, -} |