IAudioClient::Initialize返回值E_INVALIDARG与AUDCLNT_E_UNSUPPORTED_FORMAT的差异解析
关于
IAudioClient::Initialize()返回值E_INVALIDARG与AUDCLNT_E_UNSUPPORTED_FORMAT的差异解析 核心区别
AUDCLNT_E_UNSUPPORTED_FORMAT:格式描述本身合法,但当前音频引擎(共享模式)或端点设备(独占模式)不支持该格式。E_INVALIDARG:格式描述本身存在结构或语法错误,属于无效的格式定义,和设备/引擎的支持性无关。
E_INVALIDARG涵盖的具体pFormat错误场景
- 基础格式结构字段非法:
wFormatTag设置为未定义的音频格式标签(既非标准标签如WAVE_FORMAT_PCM,也不是合法的自定义GUID)nChannels设为0、负数,或超出系统支持的最大声道数(通常上限为32声道)nSamplesPerSec设为0、负数,或超出合理范围(如低于1Hz、高于192000Hz的极端值)nAvgBytesPerSec计算错误:不符合nSamplesPerSec * nChannels * wBitsPerSample / 8的PCM格式计算公式nBlockAlign计算错误:不符合nChannels * wBitsPerSample / 8的PCM格式计算公式wBitsPerSample设为非8/16/24/32等标准位深,或针对非PCM格式设置了无效位深值
- 扩展格式结构字段错误(针对
WAVEFORMATEXTENSIBLE):SubFormatGUID设置为无效值(非已知的音频子格式GUID)Samples.wValidBitsPerSample值大于wBitsPerSample,或为0/负数dwChannelMask设置的声道掩码与nChannels不匹配(如声道数为2,却使用单声道掩码SPEAKER_FRONT_LEFT)
- 格式结构大小不匹配:
cbSize字段值与实际传入的结构大小不符(如WAVEFORMATEX的cbSize应为0,却设置为WAVEFORMATEXTENSIBLE的结构大小;或WAVEFORMATEXTENSIBLE的cbSize设置错误)
内容的提问来源于stack exchange,提问作者MieszkoPasierbek
相关产品推荐
相关产品推荐

