//选择一个新的采集器 directsound or wasapi AudioInputPtr AudioInputRegistrar::newFromChoice(wstring choice) { if (! qmNew) return AudioInputPtr(); if (!choice.empty() && qmNew->find(choice) != qmNew->end()) { g_struct.s.qsAudioInput = choice; current = choice; AudioInputRegistrar * air = qmNew->find(current)->second; return AudioInputPtr(air->create()); } choice = g_struct.s.qsAudioInput; if (qmNew->find(choice) != qmNew->end()) { current = choice; return AudioInputPtr(qmNew->find(choice)->second->create()); } AudioInputRegistrar *r = NULL; std::map<wstring, AudioInputRegistrar *>::iterator mit; for (mit = qmNew->begin(); mit != qmNew->end(); mit++) { if (!r || (mit->second->priority > r->priority)) r = mit->second; } if (r) { current = r->name; g_struct.s.qsAudioInput = current; return AudioInputPtr(r->create()); } return AudioInputPtr(); }
AudioInputPtr AudioInputRegistrar::newFromChoice(QString choice) { if (! qmNew) return AudioInputPtr(); if (!choice.isEmpty() && qmNew->contains(choice)) { g.s.qsAudioInput = choice; current = choice; return AudioInputPtr(qmNew->value(current)->create()); } choice = g.s.qsAudioInput; if (qmNew->contains(choice)) { current = choice; return AudioInputPtr(qmNew->value(choice)->create()); } AudioInputRegistrar *r = NULL; foreach(AudioInputRegistrar *air, *qmNew) if (!r || (air->priority > r->priority)) r = air; if (r) { current = r->name; return AudioInputPtr(r->create()); } return AudioInputPtr(); }