在COM 控件中使用 SDL2.0 进行播放摄像头采集的音频,当多个摄像头同时播放音频的时候出现了内存泄露,后来才发现是 SDL2.0 的 api 导致的。
原来 SDL2.0 播放默认的声音设备使用的 api 为 SDL_OpenAudio(),两个以上的音频设备就要用 SDL_OpenAudioDevice()。
初始化 wated_spec 结构体,略过
bool is_first_dev = true; // 定义全局的标志位表示是第一个默认设备
if (is_first_dev == true) {
if (SDL_OpenAudio(&wated_spec, NULL) < 0)
{
//fwrite("SDL_OpenAudio", strlen("SDL_OpenAudio"),1, record_fp);
return false;
}
is_first_dev = false;
}
else { //否则使用 SDL_OpenAudioDevice() 进行播放,如果还是用 SDL_OpenAudio() 会导致当同时播放两个以上的声音设备时,
// 要过一段时间才能播放,而且最后会导致内存泄露。