Skip to content

Commit ca8391c

Browse files
authored
Allow LUT calibration when no USB grabber is present (#518)
* Fix calibration for USB grabber-less configs * Select active priority for capturing
1 parent 38b7743 commit ca8391c

File tree

7 files changed

+58
-7
lines changed

7 files changed

+58
-7
lines changed

Diff for: include/api/JsonAPI.h

+2
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ public slots:
6464

6565
void releaseLock();
6666

67+
hyperhdr::Components getActiveComponent();
68+
6769
private slots:
6870
///
6971
/// @brief Handle emits from API of a new Token request.

Diff for: include/base/HyperHdrInstance.h

+2
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,8 @@ public slots:
303303
///
304304
const PriorityMuxer::InputInfo& getPriorityInfo(int priority) const;
305305

306+
PriorityMuxer::InputInfo getCurrentPriorityInfo();
307+
306308
/// #############
307309
/// SETTINGSMANAGER
308310
///

Diff for: include/utils/LutCalibrator.h

+4-2
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
#include <algorithm>
3737

3838
#include <utils/Image.h>
39+
#include <utils/Components.h>
3940

4041
class Logger;
4142

@@ -115,14 +116,15 @@ class LutCalibrator : public QObject
115116
static LutCalibrator* getInstance();
116117

117118
signals:
118-
void assign(int checksum, ColorRgb startColor, ColorRgb endColor, bool limitedRange, double saturation, double luminance, double gammaR, double gammaG, double gammaB, int coef);
119+
void assign(hyperhdr::Components defaultComp, int checksum, ColorRgb startColor, ColorRgb endColor, bool limitedRange, double saturation, double luminance, double gammaR, double gammaG, double gammaB, int coef);
119120
void stop();
120121
void lutCalibrationUpdate(const QJsonObject& data);
121122

122123
public slots:
123-
void assignHandler(int checksum, ColorRgb startColor, ColorRgb endColor, bool limitedRange, double saturation, double luminance, double gammaR, double gammaG, double gammaB, int coef);
124+
void assignHandler(hyperhdr::Components defaultComp, int checksum, ColorRgb startColor, ColorRgb endColor, bool limitedRange, double saturation, double luminance, double gammaR, double gammaG, double gammaB, int coef);
124125
void stopHandler();
125126
void setVideoImage(const QString& name, const Image<ColorRgb>& image);
127+
void setSystemImage(const QString& name, const Image<ColorRgb>& image);
126128
void setGlobalInputImage(int priority, const Image<ColorRgb>& image, int timeout_ms, bool clearEffect = true);
127129

128130
private:

Diff for: sources/api/JsonAPI.cpp

+13-1
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,18 @@ void JsonAPI::handleSysInfoCommand(const QJsonObject&, const QString& command, i
359359
emit callbackMessage(result);
360360
}
361361

362+
hyperhdr::Components JsonAPI::getActiveComponent()
363+
{
364+
PriorityMuxer::InputInfo prio;
365+
366+
if (QThread::currentThread() == _hyperhdr->thread())
367+
prio = _hyperhdr->getCurrentPriorityInfo();
368+
else
369+
QMetaObject::invokeMethod(_hyperhdr, "getCurrentPriorityInfo", Qt::ConnectionType::BlockingQueuedConnection, Q_RETURN_ARG(PriorityMuxer::InputInfo, prio));
370+
371+
return prio.componentId;
372+
}
373+
362374
void JsonAPI::handleServerInfoCommand(const QJsonObject& message, const QString& command, int tan)
363375
{
364376
try
@@ -1327,7 +1339,7 @@ void JsonAPI::handleLutCalibrationCommand(const QJsonObject& message, const QStr
13271339
_endColor.blue = endColor["b"].toInt(255);
13281340

13291341
if (subcommand == "capture")
1330-
emit LutCalibrator::getInstance()->assign(checksum, _startColor, _endColor, limitedRange, saturation, luminance, gammaR, gammaG, gammaB, coef);
1342+
emit LutCalibrator::getInstance()->assign(getActiveComponent(), checksum, _startColor, _endColor, limitedRange, saturation, luminance, gammaR, gammaG, gammaB, coef);
13311343
else
13321344
emit LutCalibrator::getInstance()->stop();
13331345

Diff for: sources/base/HyperHdrInstance.cpp

+6
Original file line numberDiff line numberDiff line change
@@ -544,6 +544,12 @@ const HyperHdrInstance::InputInfo& HyperHdrInstance::getPriorityInfo(int priorit
544544
return _muxer.getInputInfo(priority);
545545
}
546546

547+
PriorityMuxer::InputInfo HyperHdrInstance::getCurrentPriorityInfo()
548+
{
549+
PriorityMuxer::InputInfo val = _muxer.getInputInfo(getCurrentPriority());
550+
return val;
551+
}
552+
547553
std::list<EffectDefinition> HyperHdrInstance::getEffects() const
548554
{
549555
std::list<EffectDefinition> result;

Diff for: sources/base/schema/schema-systemGrabber.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
"title" : "edt_conf_stream_max_resolution_title",
2020
"default" : 512,
2121
"minimum" : 196,
22-
"maximum" : 640,
22+
"maximum" : 960,
2323
"append" : "edt_append_pixel",
2424
"required" : true,
2525
"propertyOrder" : 7

Diff for: sources/utils/LutCalibrator.cpp

+30-3
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include <utils/GlobalSignals.h>
2929
#include <utils/Logger.h>
3030
#include <base/GrabberWrapper.h>
31+
#include <api/JsonAPI.h>
3132
#include <utils/ColorSys.h>
3233
#include <base/HyperHdrIManager.h>
3334
#include <utils/RgbTransform.h>
@@ -103,7 +104,7 @@ LutCalibrator* LutCalibrator::getInstance()
103104
return instance;
104105
}
105106

106-
void LutCalibrator::assignHandler(int checksum, ColorRgb startColor, ColorRgb endColor, bool limitedRange, double saturation, double luminance, double gammaR, double gammaG, double gammaB, int coef)
107+
void LutCalibrator::assignHandler(hyperhdr::Components defaultComp, int checksum, ColorRgb startColor, ColorRgb endColor, bool limitedRange, double saturation, double luminance, double gammaR, double gammaG, double gammaB, int coef)
107108
{
108109
if (checksum == 0)
109110
{
@@ -180,8 +181,21 @@ void LutCalibrator::assignHandler(int checksum, ColorRgb startColor, ColorRgb en
180181
_log->enable();
181182
}
182183

183-
connect(GlobalSignals::getInstance(), &GlobalSignals::setVideoImage, this, &LutCalibrator::setVideoImage, Qt::ConnectionType::UniqueConnection);
184-
connect(GlobalSignals::getInstance(), &GlobalSignals::setGlobalImage, this, &LutCalibrator::setGlobalInputImage, Qt::ConnectionType::UniqueConnection);
184+
if (defaultComp == hyperhdr::COMP_VIDEOGRABBER)
185+
{
186+
Debug(_log, "Using video grabber as a source");
187+
connect(GlobalSignals::getInstance(), &GlobalSignals::setVideoImage, this, &LutCalibrator::setVideoImage, Qt::ConnectionType::UniqueConnection);
188+
}
189+
else if (defaultComp == hyperhdr::COMP_SYSTEMGRABBER)
190+
{
191+
Debug(_log, "Using system grabber as a source");
192+
connect(GlobalSignals::getInstance(), &GlobalSignals::setSystemImage, this, &LutCalibrator::setSystemImage, Qt::ConnectionType::UniqueConnection);
193+
}
194+
else
195+
{
196+
Debug(_log, "Using flatbuffers/protobuffers as a source");
197+
connect(GlobalSignals::getInstance(), &GlobalSignals::setGlobalImage, this, &LutCalibrator::setGlobalInputImage, Qt::ConnectionType::UniqueConnection);
198+
}
185199
}
186200
else
187201
{
@@ -227,6 +241,11 @@ void LutCalibrator::setVideoImage(const QString& name, const Image<ColorRgb>& im
227241
handleImage(image);
228242
}
229243

244+
void LutCalibrator::setSystemImage(const QString& name, const Image<ColorRgb>& image)
245+
{
246+
handleImage(image);
247+
}
248+
230249
void LutCalibrator::setGlobalInputImage(int priority, const Image<ColorRgb>& image, int timeout_ms, bool clearEffect)
231250
{
232251
handleImage(image);
@@ -868,6 +887,7 @@ bool LutCalibrator::correctionEnd()
868887
{
869888

870889
disconnect(GlobalSignals::getInstance(), &GlobalSignals::setVideoImage, this, &LutCalibrator::setVideoImage);
890+
disconnect(GlobalSignals::getInstance(), &GlobalSignals::setSystemImage, this, &LutCalibrator::setSystemImage);
871891
disconnect(GlobalSignals::getInstance(), &GlobalSignals::setGlobalImage, this, &LutCalibrator::setGlobalInputImage);
872892

873893
double floor = qMax(_minColor.red, qMax(_minColor.green, _minColor.blue));
@@ -1140,6 +1160,12 @@ double LutCalibrator::fineTune(double& optimalRange, double& optimalScale, int&
11401160
calculated.green = ootf(calculated.green);
11411161
calculated.blue = ootf(calculated.blue);
11421162
}
1163+
else
1164+
{
1165+
calculated.red = normalized.red;
1166+
calculated.green = normalized.green;
1167+
calculated.blue = normalized.blue;
1168+
}
11431169

11441170
calculated.red = clampDouble(calculated.red, 0, 1.0) * 255.0;
11451171
calculated.green = clampDouble(calculated.green, 0, 1.0) * 255.0;
@@ -1213,6 +1239,7 @@ bool LutCalibrator::finalize(bool fastTrack)
12131239
if (!fastTrack)
12141240
{
12151241
disconnect(GlobalSignals::getInstance(), &GlobalSignals::setVideoImage, this, &LutCalibrator::setVideoImage);
1242+
disconnect(GlobalSignals::getInstance(), &GlobalSignals::setSystemImage, this, &LutCalibrator::setSystemImage);
12161243
disconnect(GlobalSignals::getInstance(), &GlobalSignals::setGlobalImage, this, &LutCalibrator::setGlobalInputImage);
12171244
}
12181245

0 commit comments

Comments
 (0)