made getRecordingDevices keep already existing devices

--HG--
branch : minor-mic-input
This commit is contained in:
Raidho
2016-11-03 20:24:21 +03:00
parent 57d02dec2b
commit c7c253f449
5 changed files with 30 additions and 10 deletions
+1 -1
View File
@@ -30,7 +30,7 @@ namespace null
const char *RecordingDevice::name = "null"; const char *RecordingDevice::name = "null";
RecordingDevice::RecordingDevice(const char *, int) RecordingDevice::RecordingDevice(const char *)
{ {
} }
+1 -1
View File
@@ -34,7 +34,7 @@ namespace null
class RecordingDevice : public love::audio::RecordingDevice class RecordingDevice : public love::audio::RecordingDevice
{ {
public: public:
RecordingDevice(const char *name, int id); RecordingDevice(const char *name);
virtual ~RecordingDevice(); virtual ~RecordingDevice();
virtual bool startRecording(); virtual bool startRecording();
virtual bool startRecording(int samples, int sampleRate, int bitDepth, int channels); virtual bool startRecording(int samples, int sampleRate, int bitDepth, int channels);
+26 -4
View File
@@ -315,7 +315,8 @@ void Audio::setDistanceModel(DistanceModel distanceModel)
const std::vector<love::audio::RecordingDevice*> &Audio::getRecordingDevices() const std::vector<love::audio::RecordingDevice*> &Audio::getRecordingDevices()
{ {
capture.clear(); std::vector<std::string> devnames;
std::vector<love::audio::RecordingDevice*> devices;
std::string defaultname(alcGetString(NULL, ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER)); std::string defaultname(alcGetString(NULL, ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER));
@@ -330,11 +331,15 @@ const std::vector<love::audio::RecordingDevice*> &Audio::getRecordingDevices()
alcCaptureCloseDevice(defaultdevice); alcCaptureCloseDevice(defaultdevice);
} }
else else
//failed to open default recording device - bail, return empty list {
//failed to open default recording device - bail, return empty list
capture.clear();
return capture; return capture;
}
} }
capture.push_back(new RecordingDevice(defaultname.c_str(), 0)); devnames.push_back(defaultname);
//find devices name list
const ALCchar *devstr = alcGetString(NULL, ALC_CAPTURE_DEVICE_SPECIFIER); const ALCchar *devstr = alcGetString(NULL, ALC_CAPTURE_DEVICE_SPECIFIER);
size_t offset = 0; size_t offset = 0;
while (true) while (true)
@@ -343,10 +348,27 @@ const std::vector<love::audio::RecordingDevice*> &Audio::getRecordingDevices()
break; break;
std::string str((ALCchar*)&devstr[offset]); std::string str((ALCchar*)&devstr[offset]);
if (str != defaultname) if (str != defaultname)
capture.push_back(new RecordingDevice(str.c_str(), capture.size())); devnames.push_back(str);
offset += str.length() + 1; offset += str.length() + 1;
} }
//build list of devices
devices.reserve(devnames.size());
for (unsigned int i = 0; i < devnames.size(); i++)
{
devices[i] = nullptr;
for (auto c = capture.begin(); c != capture.end(); c++)
if (devnames[i] == (*c)->getName())
devices[i] = *c;
if (devices[i] == nullptr)
devices[i] = new RecordingDevice(devnames[i].c_str());
}
capture.clear();
for (unsigned int i = 0; i < devnames.size(); i++)
capture.push_back(devices[i]);
return capture; return capture;
} }
+1 -2
View File
@@ -42,9 +42,8 @@ public:
}; };
RecordingDevice::RecordingDevice(const char *name, int id) RecordingDevice::RecordingDevice(const char *name)
: name(name) : name(name)
, id(id)
{ {
} }
+1 -2
View File
@@ -47,7 +47,7 @@ namespace openal
class RecordingDevice : public love::audio::RecordingDevice class RecordingDevice : public love::audio::RecordingDevice
{ {
public: public:
RecordingDevice(const char *name, int id); RecordingDevice(const char *name);
virtual ~RecordingDevice(); virtual ~RecordingDevice();
virtual bool startRecording(); virtual bool startRecording();
virtual bool startRecording(int samples, int sampleRate, int bitDepth, int channels); virtual bool startRecording(int samples, int sampleRate, int bitDepth, int channels);
@@ -66,7 +66,6 @@ private:
int bitDepth = 16; int bitDepth = 16;
int channels = 1; int channels = 1;
std::string name; std::string name;
int id;
ALCdevice *device = nullptr; ALCdevice *device = nullptr;
}; //RecordingDevice }; //RecordingDevice