Audio File Library库(libaudiofile)可为访问各种音频文件格式提供统一的API。 libaudiofile库在试图解码WAV文件时msadpcm.c的194行写过了缓冲区: code = *encoded >> 4; newSample = ms_adpcm_decode_sample(state[0], code, coefficient[0]); *decoded++ = newSample; 所分配的缓冲区大小主要取决于以下公式: bufsize = outc->nframes * _af_format_frame_size(&outc->f, AF_TRUE); 由于msadpcm模块没有实现max_pull callback,outc->nframes主要来自于_AF_ATOMIC_NVFRAMES(1024),这导致在modules.c的2539行分配了4096字节(帧大小为4)。 在ms_adpcm_decode_block()中,msadpcm->samplesPerBlock设置为2036,outputLength为8144,很明显这超出了所分配的4096字节的缓冲区。
Audio File Library库(libaudiofile)可为访问各种音频文件格式提供统一的API。 libaudiofile库在试图解码WAV文件时msadpcm.c的194行写过了缓冲区: code = *encoded >> 4; newSample = ms_adpcm_decode_sample(state[0], code, coefficient[0]); *decoded++ = newSample; 所分配的缓冲区大小主要取决于以下公式: bufsize = outc->nframes * _af_format_frame_size(&outc->f, AF_TRUE); 由于msadpcm模块没有实现max_pull callback,outc->nframes主要来自于_AF_ATOMIC_NVFRAMES(1024),这导致在modules.c的2539行分配了4096字节(帧大小为4)。 在ms_adpcm_decode_block()中,msadpcm->samplesPerBlock设置为2036,outputLength为8144,很明显这超出了所分配的4096字节的缓冲区。