From 0a59dcffda62b158cc71e3e37e98584d8720b1b4 Mon Sep 17 00:00:00 2001 From: Daniel Aharoni Date: Sat, 29 Aug 2020 16:47:24 -0700 Subject: [PATCH 1/4] Remove the need to perform a QImage .copy() on every display frame. --- source/behaviorcam.cpp | 2 +- source/miniscope.cpp | 2 +- userConfigs/UserConfigExample_Dual_MiniCAM_PLUS_V4.json | 4 ++-- userConfigs/UserConfigExample_MiniCAM.json | 2 +- userConfigs/UserConfigExample_V4_BNO_Miniscope.json | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/source/behaviorcam.cpp b/source/behaviorcam.cpp index c91c61b..2fd6f82 100644 --- a/source/behaviorcam.cpp +++ b/source/behaviorcam.cpp @@ -445,7 +445,7 @@ void BehaviorCam::sendNewFrame(){ else tempFrame2 = QImage(frameBuffer[f].data, frameBuffer[f].cols, frameBuffer[f].rows, frameBuffer[f].step, QImage::Format_RGB888); - vidDisplay->setDisplayFrame(tempFrame2.copy()); + vidDisplay->setDisplayFrame(tempFrame2); vidDisplay->setBufferUsed(usedFrames->available()); if (f > 0) // This is just a quick cheat so I don't have to wrap around for (f-1) diff --git a/source/miniscope.cpp b/source/miniscope.cpp index 1644f4e..f9c47d0 100644 --- a/source/miniscope.cpp +++ b/source/miniscope.cpp @@ -479,7 +479,7 @@ void Miniscope::sendNewFrame(){ // vidDisplay->setDisplayFrame(tempFrame2.copy()); // TODO: Check to see if we can get rid of .copy() here - vidDisplay->setDisplayFrame(tempFrame2.copy()); + vidDisplay->setDisplayFrame(tempFrame2); } else if (m_displatState == "dFF") { // TODO: Implement this better. I am sure it can be sped up a lot. Maybe do most of it in a shader diff --git a/userConfigs/UserConfigExample_Dual_MiniCAM_PLUS_V4.json b/userConfigs/UserConfigExample_Dual_MiniCAM_PLUS_V4.json index 1eee2bf..659050a 100644 --- a/userConfigs/UserConfigExample_Dual_MiniCAM_PLUS_V4.json +++ b/userConfigs/UserConfigExample_Dual_MiniCAM_PLUS_V4.json @@ -47,7 +47,7 @@ { "deviceName": "MiniCAM1", "deviceType": "Minicam-Mono-XGA", - "deviceID": 2, + "deviceID": 3, "showSaturation": true, "ROI": { "notes": "This defines the bounding box of the portion of the video that is saved to disk", @@ -75,7 +75,7 @@ "filterBadData": true }, "streamHeadOrientation_OLD": true, - "deviceID": 3, + "deviceID": 0, "showSaturation": true, "compressionOptions": ["MJPG","MJ2C","XVID","FFV1"], "compression": "FFV1", diff --git a/userConfigs/UserConfigExample_MiniCAM.json b/userConfigs/UserConfigExample_MiniCAM.json index 3b6bb1e..e6cec0c 100644 --- a/userConfigs/UserConfigExample_MiniCAM.json +++ b/userConfigs/UserConfigExample_MiniCAM.json @@ -27,7 +27,7 @@ { "deviceName": "MiniCAM0", "deviceType": "Minicam-Mono-XGA", - "deviceID": 2, + "deviceID": 1, "showSaturation": true, "ROI": { "notes": "This defines the bounding box of the portion of the video that is saved to disk", diff --git a/userConfigs/UserConfigExample_V4_BNO_Miniscope.json b/userConfigs/UserConfigExample_V4_BNO_Miniscope.json index 33601ba..56abaab 100644 --- a/userConfigs/UserConfigExample_V4_BNO_Miniscope.json +++ b/userConfigs/UserConfigExample_V4_BNO_Miniscope.json @@ -36,7 +36,7 @@ "filterBadData": true }, "streamHeadOrientation_OLD": true, - "deviceID": 1, + "deviceID": 0, "showSaturation": true, "compressionOptions": ["MJPG","MJ2C","XVID","FFV1"], "compression": "FFV1", From 3d147f78fcb4d64002c6bae11726ad8c20854782 Mon Sep 17 00:00:00 2001 From: Daniel Aharoni Date: Sun, 30 Aug 2020 14:08:47 -0700 Subject: [PATCH 2/4] Add show saturation switch to GUI. Disable some behav cam buttons when not applicable. --- source/Miniscope_V4_BNO.qml | 19 +++++++++++++++++++ source/behaviorCam.qml | 22 +++++++++++++++++++++- source/behaviorcam.cpp | 18 ++++++++++++++++-- source/behaviorcam.h | 1 + source/miniscope.cpp | 15 +++++++++++++-- source/miniscope.h | 1 + 6 files changed, 71 insertions(+), 5 deletions(-) diff --git a/source/Miniscope_V4_BNO.qml b/source/Miniscope_V4_BNO.qml index 4139579..a7998d8 100644 --- a/source/Miniscope_V4_BNO.qml +++ b/source/Miniscope_V4_BNO.qml @@ -14,6 +14,7 @@ Item { signal vidPropChangedSignal(string name, double displayValue, double i2cValue, double i2cValue2) signal takeScreenShotSignal() signal dFFSwitchChanged(bool value) + signal saturationSwitchChanged(bool value) Keys.onPressed: { if (event.key === Qt.Key_H) { @@ -89,6 +90,20 @@ Item { Layout.row: 0 } + Switch { + id: saturationSwitch + objectName: "saturationSwitch" + text: qsTr("Show Saturation") + hoverEnabled: false + + font.bold: true + font.family: "Arial" + Layout.alignment: Qt.AlignHCenter | Qt.AlignTop + Layout.column: 2 + Layout.row: 0 + + } + Text{ id: droppedFrameCount objectName: "droppedFrameCount" @@ -274,6 +289,10 @@ Item { target: dFFSwitch onClicked: dFFSwitchChanged(dFFSwitch.checked) } + Connections{ + target: saturationSwitch + onClicked: saturationSwitchChanged(saturationSwitch.checked) + } states: [ State{ diff --git a/source/behaviorCam.qml b/source/behaviorCam.qml index dee6f8d..a23f2eb 100644 --- a/source/behaviorCam.qml +++ b/source/behaviorCam.qml @@ -22,6 +22,8 @@ Item { signal calibrateCameraStart() signal calibrateCameraQuit() + signal saturationSwitchChanged(bool value) + Keys.onPressed: { if (event.key === Qt.Key_H) { if (root.state == "controlsShown") @@ -211,7 +213,7 @@ Item { font.bold: true font.weight: Font.Normal radius: 4 - enabled: true + enabled: false Layout.column: 0 Layout.row: 0 // TODO: Make hovering color change work. @@ -230,6 +232,19 @@ Item { } } + Switch { + id: saturationSwitch + objectName: "saturationSwitch" + text: qsTr("Show Saturation") + hoverEnabled: false + + font.bold: true + font.family: "Arial" + Layout.alignment: Qt.AlignHCenter | Qt.AlignTop + Layout.column: 2 + Layout.row: 0 + } + Text{ id: droppedFrameCount objectName: "droppedFrameCount" @@ -323,6 +338,7 @@ Item { font.weight: Font.Normal radius: 4 enabled: true + visible: false background: Rectangle { id: camPropsRect radius: camProps.radius @@ -427,6 +443,10 @@ Item { target: beta onValueChangedSignal: vidPropChangedSignal(beta.objectName, displayValue, i2cValue, i2cValue2) } + Connections{ + target: saturationSwitch + onClicked: saturationSwitchChanged(saturationSwitch.checked) + } states: [ diff --git a/source/behaviorcam.cpp b/source/behaviorcam.cpp index 2fd6f82..aadb094 100644 --- a/source/behaviorcam.cpp +++ b/source/behaviorcam.cpp @@ -140,16 +140,24 @@ void BehaviorCam::createView() // -------------------- rootObject = view->rootObject(); + + QObject::connect(rootObject, SIGNAL( saturationSwitchChanged(bool) ), + this, SLOT( handleSaturationSwitchChanged(bool) )); + configureBehavCamControls(); vidDisplay = rootObject->findChild("vD"); vidDisplay->setMaxBuffer(FRAME_BUFFER_SIZE); vidDisplay->setWindowScaleValue(m_ucBehavCam["windowScale"].toDouble(1)); // Turn on or off saturation display - if (m_ucBehavCam["showSaturation"].toBool(false)) + if (m_ucBehavCam["showSaturation"].toBool(false)) { vidDisplay->setShowSaturation(1); - else + rootObject->findChild("saturationSwitch")->setProperty("checked", true); + } + else { vidDisplay->setShowSaturation(0); + rootObject->findChild("saturationSwitch")->setProperty("checked", false); + } QObject::connect(rootObject, SIGNAL( takeScreenShotSignal() ), this, SLOT( handleTakeScreenShotSignal() )); @@ -158,6 +166,7 @@ void BehaviorCam::createView() // Open OpenCV properties dialog for behav cam if (!isMiniCAM) { + rootObject->findChild("camProps")->setProperty("visible", true); QObject::connect(rootObject, SIGNAL( camPropsClicked() ), this, SLOT( handleCamPropsClicked())); QObject::connect(this, SIGNAL( openCamPropsDialog()), behavCamStream, SLOT( openCamPropsDialog())); } @@ -617,3 +626,8 @@ void BehaviorCam::handleInitCommandsRequest() qDebug() << "Reinitializing device."; sendInitCommands(); } + +void BehaviorCam::handleSaturationSwitchChanged(bool checked) +{ + vidDisplay->setShowSaturation(checked); +} diff --git a/source/behaviorcam.h b/source/behaviorcam.h index 3a35cea..92fde3d 100644 --- a/source/behaviorcam.h +++ b/source/behaviorcam.h @@ -70,6 +70,7 @@ public slots: void handleTakeScreenShotSignal(); void close(); void handleInitCommandsRequest(); + void handleSaturationSwitchChanged(bool checked); void handleCamPropsClicked() { emit openCamPropsDialog();} void handleSetRoiClicked(); diff --git a/source/miniscope.cpp b/source/miniscope.cpp index f9c47d0..bec8f87 100644 --- a/source/miniscope.cpp +++ b/source/miniscope.cpp @@ -164,6 +164,8 @@ void Miniscope::createView() this, SLOT( handlePropChangedSignal(QString, double, double, double) )); QObject::connect(rootObject, SIGNAL( dFFSwitchChanged(bool) ), this, SLOT( handleDFFSwitchChange(bool) )); + QObject::connect(rootObject, SIGNAL( saturationSwitchChanged(bool) ), + this, SLOT( handleSaturationSwitchChanged(bool) )); configureMiniscopeControls(); vidDisplay = rootObject->findChild("vD"); @@ -171,10 +173,14 @@ void Miniscope::createView() vidDisplay->setWindowScaleValue(m_ucMiniscope["windowScale"].toDouble(1)); // Turn on or off show saturation display - if (m_ucMiniscope["showSaturation"].toBool(false)) + if (m_ucMiniscope["showSaturation"].toBool(false)) { vidDisplay->setShowSaturation(1); - else + rootObject->findChild("saturationSwitch")->setProperty("checked", true); + } + else { vidDisplay->setShowSaturation(0); + rootObject->findChild("saturationSwitch")->setProperty("checked", false); + } if (m_headOrientationStreamState) bnoDisplay = rootObject->findChild("bno"); @@ -631,6 +637,11 @@ void Miniscope::handleDFFSwitchChange(bool checked) m_displatState = "Raw"; } +void Miniscope::handleSaturationSwitchChanged(bool checked) +{ + vidDisplay->setShowSaturation(checked); +} + void Miniscope::handleSetExtTriggerTrackingState(bool state) { m_extTriggerTrackingState = state; diff --git a/source/miniscope.h b/source/miniscope.h index 164db3a..c9148cd 100644 --- a/source/miniscope.h +++ b/source/miniscope.h @@ -74,6 +74,7 @@ public slots: void handlePropChangedSignal(QString type, double displayValue, double i2cValue, double i2cValue2); void handleTakeScreenShotSignal(); void handleDFFSwitchChange(bool checked); + void handleSaturationSwitchChanged(bool checked); void handleSetExtTriggerTrackingState(bool state); void handleRecordStart(); // Currently used to toggle LED on and off void handleRecordStop(); // Currently used to toggle LED on and off From c3ab4064c4360c38ef2b52444eb3b31395bdb5ef Mon Sep 17 00:00:00 2001 From: Daniel Aharoni Date: Sun, 30 Aug 2020 14:23:52 -0700 Subject: [PATCH 3/4] Update version number and remove refer to libusb for now. --- source/Miniscope-DAQ-QT-Software.pro | 4 ++-- source/backend.cpp | 2 +- source/main.cpp | 2 +- source/main.qml | 3 ++- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/source/Miniscope-DAQ-QT-Software.pro b/source/Miniscope-DAQ-QT-Software.pro index 93cef83..f7c535d 100644 --- a/source/Miniscope-DAQ-QT-Software.pro +++ b/source/Miniscope-DAQ-QT-Software.pro @@ -64,8 +64,8 @@ win32 { # #DEPENDPATH += # For libusb - LIBS += -LC:/libusb-1.0.23/MS64/dll/ -llibusb-1.0 - INCLUDEPATH += C:/libusb-1.0.23/include/libusb-1.0 +# LIBS += -LC:/libusb-1.0.23/MS64/dll/ -llibusb-1.0 +# INCLUDEPATH += C:/libusb-1.0.23/include/libusb-1.0 } else { CONFIG += link_pkgconfig diff --git a/source/backend.cpp b/source/backend.cpp index 058db6a..a27a9cb 100644 --- a/source/backend.cpp +++ b/source/backend.cpp @@ -26,7 +26,7 @@ #include "datasaver.h" #include "behaviortracker.h" -#include +//#include //#define DEBUG diff --git a/source/main.cpp b/source/main.cpp index 1aa5289..8694615 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -9,7 +9,7 @@ #include "backend.h" -#define VERSION_NUMBER "0.200" +#define VERSION_NUMBER "1.00" // TODO: have exit button close everything // For Window's deployment diff --git a/source/main.qml b/source/main.qml index b796412..bd6a749 100644 --- a/source/main.qml +++ b/source/main.qml @@ -46,8 +46,9 @@ Window { "Your OpenGL verions: " + OpenGLInfo.majorVersion + "." + OpenGLInfo.minorVersion + "
" + "Developed by the Aharoni Lab, UCLA
" + "Overview of the UCLA Miniscope project: click here
" + + "Miniscope Wiki for newest projects: click here
" + "Miniscope Discussion Board: click here
" + - "Please submit issues, comments, suggestions to the Miniscope DAQ Software Github Repositories: click here
" + + "Please submit issues, comments, suggestions to the Miniscope DAQ Software Github Repository: click here
" + "Miniscope Twitter Link: click here

" + "Icons from icon8" verticalAlignment: Text.AlignVCenter From f291b81f0c99bfff276f43cd38273c5e3ff46337 Mon Sep 17 00:00:00 2001 From: Daniel Aharoni Date: Sun, 30 Aug 2020 20:28:29 -0700 Subject: [PATCH 4/4] Add Miniscope icon --- source/Miniscope-DAQ-QT-Software.pro | 2 ++ source/miniscope_icon.ico | Bin 0 -> 270398 bytes 2 files changed, 2 insertions(+) create mode 100644 source/miniscope_icon.ico diff --git a/source/Miniscope-DAQ-QT-Software.pro b/source/Miniscope-DAQ-QT-Software.pro index f7c535d..a2c7ff7 100644 --- a/source/Miniscope-DAQ-QT-Software.pro +++ b/source/Miniscope-DAQ-QT-Software.pro @@ -32,6 +32,8 @@ QML_IMPORT_PATH = # Additional import path used to resolve QML modules just for Qt Quick Designer QML_DESIGNER_IMPORT_PATH = +# Add Icon +RC_ICONS = miniscope_icon.ico # Default rules for deployment. qnx: target.path = /tmp/$${TARGET}/bin diff --git a/source/miniscope_icon.ico b/source/miniscope_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..261918a81753947a0deaa9ef6fa294a5a1d4f30c GIT binary patch literal 270398 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 literal 0 HcmV?d00001