Fixed segfaults and many other bugs in device controls.
This commit is contained in:
parent
39c84d9788
commit
db094901bc
5 changed files with 34 additions and 17 deletions
|
@ -1287,7 +1287,7 @@ int AkVCam::CmdParserPrivate::readControl(const StringMap &flags,
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto &control: this->m_ipcBridge.controls(deviceId))
|
for (auto &control: this->m_ipcBridge.controls(deviceId))
|
||||||
if (control.description == args[2]) {
|
if (control.id == args[2]) {
|
||||||
if (flags.empty()) {
|
if (flags.empty()) {
|
||||||
std::cout << control.value << std::endl;
|
std::cout << control.value << std::endl;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -666,9 +666,9 @@ void AkVCam::AssistantPrivate::broadcasting(xpc_connection_t client,
|
||||||
|
|
||||||
void AkVCam::AssistantPrivate::controlsUpdated(xpc_connection_t client, xpc_object_t event)
|
void AkVCam::AssistantPrivate::controlsUpdated(xpc_connection_t client, xpc_object_t event)
|
||||||
{
|
{
|
||||||
|
UNUSED(client);
|
||||||
AkLogFunction();
|
AkLogFunction();
|
||||||
std::string deviceId = xpc_dictionary_get_string(event, "device");
|
std::string deviceId = xpc_dictionary_get_string(event, "device");
|
||||||
bool ok = false;
|
|
||||||
|
|
||||||
if (this->m_deviceConfigs.count(deviceId) > 0) {
|
if (this->m_deviceConfigs.count(deviceId) > 0) {
|
||||||
auto notification = xpc_copy(event);
|
auto notification = xpc_copy(event);
|
||||||
|
@ -677,13 +677,7 @@ void AkVCam::AssistantPrivate::controlsUpdated(xpc_connection_t client, xpc_obje
|
||||||
xpc_connection_send_message(client.second, notification);
|
xpc_connection_send_message(client.second, notification);
|
||||||
|
|
||||||
xpc_release(notification);
|
xpc_release(notification);
|
||||||
ok = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
auto reply = xpc_dictionary_create_reply(event);
|
|
||||||
xpc_dictionary_set_bool(reply, "status", ok);
|
|
||||||
xpc_connection_send_message(client, reply);
|
|
||||||
xpc_release(reply);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AkVCam::AssistantPrivate::listenerAdd(xpc_connection_t client,
|
void AkVCam::AssistantPrivate::listenerAdd(xpc_connection_t client,
|
||||||
|
|
|
@ -511,10 +511,8 @@ void AkVCam::IpcBridge::setControls(const std::string &deviceId,
|
||||||
auto dictionary = xpc_dictionary_create(nullptr, nullptr, 0);
|
auto dictionary = xpc_dictionary_create(nullptr, nullptr, 0);
|
||||||
xpc_dictionary_set_int64(dictionary, "message", AKVCAM_ASSISTANT_MSG_DEVICE_CONTROLS_UPDATED);
|
xpc_dictionary_set_int64(dictionary, "message", AKVCAM_ASSISTANT_MSG_DEVICE_CONTROLS_UPDATED);
|
||||||
xpc_dictionary_set_string(dictionary, "device", deviceId.c_str());
|
xpc_dictionary_set_string(dictionary, "device", deviceId.c_str());
|
||||||
auto reply = xpc_connection_send_message_with_reply_sync(this->d->m_serverMessagePort,
|
xpc_connection_send_message(this->d->m_serverMessagePort, dictionary);
|
||||||
dictionary);
|
|
||||||
xpc_release(dictionary);
|
xpc_release(dictionary);
|
||||||
xpc_release(reply);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> AkVCam::IpcBridge::listeners(const std::string &deviceId)
|
std::vector<std::string> AkVCam::IpcBridge::listeners(const std::string &deviceId)
|
||||||
|
@ -1040,11 +1038,6 @@ void AkVCam::IpcBridgePrivate::controlsUpdated(xpc_connection_t client,
|
||||||
ControlsChanged,
|
ControlsChanged,
|
||||||
deviceId,
|
deviceId,
|
||||||
controls)
|
controls)
|
||||||
|
|
||||||
auto reply = xpc_dictionary_create_reply(event);
|
|
||||||
xpc_dictionary_set_bool(reply, "status", cameraIndex >= 0);
|
|
||||||
xpc_connection_send_message(client, reply);
|
|
||||||
xpc_release(reply);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AkVCam::IpcBridgePrivate::listenerAdd(xpc_connection_t client,
|
void AkVCam::IpcBridgePrivate::listenerAdd(xpc_connection_t client,
|
||||||
|
|
|
@ -354,7 +354,7 @@ void AkVCam::PluginInterface::controlsChanged(void *userData,
|
||||||
device->setHorizontalMirror(controls.at("hflip"));
|
device->setHorizontalMirror(controls.at("hflip"));
|
||||||
|
|
||||||
if (controls.count("vflip"))
|
if (controls.count("vflip"))
|
||||||
device->setHorizontalMirror(controls.at("vflip"));
|
device->setVerticalMirror(controls.at("vflip"));
|
||||||
|
|
||||||
if (controls.count("scaling"))
|
if (controls.count("scaling"))
|
||||||
device->setScaling(Scaling(controls.at("scaling")));
|
device->setScaling(Scaling(controls.at("scaling")));
|
||||||
|
|
|
@ -333,6 +333,12 @@ void AkVCam::Stream::setHorizontalMirror(bool horizontalMirror)
|
||||||
|
|
||||||
this->d->m_horizontalMirror = horizontalMirror;
|
this->d->m_horizontalMirror = horizontalMirror;
|
||||||
this->d->updateTestFrame();
|
this->d->updateTestFrame();
|
||||||
|
this->d->m_mutex.lock();
|
||||||
|
|
||||||
|
if (this->d->m_broadcaster.empty())
|
||||||
|
this->d->m_currentFrame = this->d->m_testFrameAdapted;
|
||||||
|
|
||||||
|
this->d->m_mutex.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AkVCam::Stream::setVerticalMirror(bool verticalMirror)
|
void AkVCam::Stream::setVerticalMirror(bool verticalMirror)
|
||||||
|
@ -344,6 +350,12 @@ void AkVCam::Stream::setVerticalMirror(bool verticalMirror)
|
||||||
|
|
||||||
this->d->m_verticalMirror = verticalMirror;
|
this->d->m_verticalMirror = verticalMirror;
|
||||||
this->d->updateTestFrame();
|
this->d->updateTestFrame();
|
||||||
|
this->d->m_mutex.lock();
|
||||||
|
|
||||||
|
if (this->d->m_broadcaster.empty())
|
||||||
|
this->d->m_currentFrame = this->d->m_testFrameAdapted;
|
||||||
|
|
||||||
|
this->d->m_mutex.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AkVCam::Stream::setScaling(Scaling scaling)
|
void AkVCam::Stream::setScaling(Scaling scaling)
|
||||||
|
@ -355,6 +367,12 @@ void AkVCam::Stream::setScaling(Scaling scaling)
|
||||||
|
|
||||||
this->d->m_scaling = scaling;
|
this->d->m_scaling = scaling;
|
||||||
this->d->updateTestFrame();
|
this->d->updateTestFrame();
|
||||||
|
this->d->m_mutex.lock();
|
||||||
|
|
||||||
|
if (this->d->m_broadcaster.empty())
|
||||||
|
this->d->m_currentFrame = this->d->m_testFrameAdapted;
|
||||||
|
|
||||||
|
this->d->m_mutex.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AkVCam::Stream::setAspectRatio(AspectRatio aspectRatio)
|
void AkVCam::Stream::setAspectRatio(AspectRatio aspectRatio)
|
||||||
|
@ -366,6 +384,12 @@ void AkVCam::Stream::setAspectRatio(AspectRatio aspectRatio)
|
||||||
|
|
||||||
this->d->m_aspectRatio = aspectRatio;
|
this->d->m_aspectRatio = aspectRatio;
|
||||||
this->d->updateTestFrame();
|
this->d->updateTestFrame();
|
||||||
|
this->d->m_mutex.lock();
|
||||||
|
|
||||||
|
if (this->d->m_broadcaster.empty())
|
||||||
|
this->d->m_currentFrame = this->d->m_testFrameAdapted;
|
||||||
|
|
||||||
|
this->d->m_mutex.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AkVCam::Stream::setSwapRgb(bool swap)
|
void AkVCam::Stream::setSwapRgb(bool swap)
|
||||||
|
@ -377,6 +401,12 @@ void AkVCam::Stream::setSwapRgb(bool swap)
|
||||||
|
|
||||||
this->d->m_swapRgb = swap;
|
this->d->m_swapRgb = swap;
|
||||||
this->d->updateTestFrame();
|
this->d->updateTestFrame();
|
||||||
|
this->d->m_mutex.lock();
|
||||||
|
|
||||||
|
if (this->d->m_broadcaster.empty())
|
||||||
|
this->d->m_currentFrame = this->d->m_testFrameAdapted;
|
||||||
|
|
||||||
|
this->d->m_mutex.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
OSStatus AkVCam::Stream::copyBufferQueue(CMIODeviceStreamQueueAlteredProc queueAlteredProc,
|
OSStatus AkVCam::Stream::copyBufferQueue(CMIODeviceStreamQueueAlteredProc queueAlteredProc,
|
||||||
|
|
Loading…
Reference in a new issue