mirror of
https://git.jami.net/savoirfairelinux/jami-daemon.git
synced 2025-08-07 22:02:12 +08:00
video: start device event listener when device list is empty
This patch fix video device detection. Before device event listeners would not start if a video device list is empty. Change-Id: I5b320c1ae47b945d6f570e3cd2afcd6bd01dfdae
This commit is contained in:
@ -71,45 +71,41 @@ void VideoDeviceMonitorImpl::start()
|
||||
auto myVideoDevices = [[AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]
|
||||
arrayByAddingObjectsFromArray:
|
||||
[AVCaptureDevice devicesWithMediaType:AVMediaTypeMuxed]];
|
||||
if ( [myVideoDevices count] == 0 )
|
||||
{
|
||||
JAMI_ERR("Can't find any suitable video device");
|
||||
return;
|
||||
}
|
||||
|
||||
int deviceCount = [myVideoDevices count];
|
||||
int ivideo;
|
||||
for ( ivideo = 0; ivideo < deviceCount; ++ivideo )
|
||||
if (deviceCount > 0)
|
||||
{
|
||||
AVCaptureDevice* avf_device = [myVideoDevices objectAtIndex:ivideo];
|
||||
printf("avcapture %d/%d %s %s\n", ivideo + 1,
|
||||
deviceCount,
|
||||
[[avf_device modelID] UTF8String],
|
||||
[[avf_device uniqueID] UTF8String]);
|
||||
try {
|
||||
monitor_->addDevice([[avf_device uniqueID] UTF8String]);
|
||||
} catch (const std::runtime_error &e) {
|
||||
JAMI_ERR("%s", e.what());
|
||||
for (int ivideo = 0; ivideo < deviceCount; ++ivideo)
|
||||
{
|
||||
AVCaptureDevice* avf_device = [myVideoDevices objectAtIndex:ivideo];
|
||||
printf("avcapture %d/%d %s %s\n", ivideo + 1,
|
||||
deviceCount,
|
||||
[[avf_device modelID] UTF8String],
|
||||
[[avf_device uniqueID] UTF8String]);
|
||||
try {
|
||||
monitor_->addDevice([[avf_device uniqueID] UTF8String]);
|
||||
} catch (const std::runtime_error &e) {
|
||||
JAMI_ERR("%s", e.what());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
|
||||
id deviceWasConnectedObserver = [notificationCenter addObserverForName:AVCaptureDeviceWasConnectedNotification
|
||||
object:nil
|
||||
queue:[NSOperationQueue mainQueue]
|
||||
usingBlock:^(NSNotification *note) {
|
||||
auto dev = (AVCaptureDevice*)note.object;
|
||||
if([dev hasMediaType:AVMediaTypeVideo])
|
||||
monitor_->addDevice([[dev uniqueID] UTF8String]);
|
||||
}];
|
||||
object:nil
|
||||
queue:[NSOperationQueue mainQueue]
|
||||
usingBlock:^(NSNotification *note) {
|
||||
auto dev = (AVCaptureDevice*)note.object;
|
||||
if([dev hasMediaType:AVMediaTypeVideo])
|
||||
monitor_->addDevice([[dev uniqueID] UTF8String]);
|
||||
}];
|
||||
id deviceWasDisconnectedObserver = [notificationCenter addObserverForName:AVCaptureDeviceWasDisconnectedNotification
|
||||
object:nil
|
||||
queue:[NSOperationQueue mainQueue]
|
||||
usingBlock:^(NSNotification *note) {
|
||||
auto dev = (AVCaptureDevice*)note.object;
|
||||
if([dev hasMediaType:AVMediaTypeVideo])
|
||||
monitor_->removeDevice([[dev uniqueID] UTF8String]);
|
||||
}];
|
||||
object:nil
|
||||
queue:[NSOperationQueue mainQueue]
|
||||
usingBlock:^(NSNotification *note) {
|
||||
auto dev = (AVCaptureDevice*)note.object;
|
||||
if([dev hasMediaType:AVMediaTypeVideo])
|
||||
monitor_->removeDevice([[dev uniqueID] UTF8String]);
|
||||
}];
|
||||
observers = [[NSArray alloc] initWithObjects:deviceWasConnectedObserver, deviceWasDisconnectedObserver, nil];
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user