Skip to content

Commit

Permalink
Allow LUT calibration when no USB grabber is present (#518)
Browse files Browse the repository at this point in the history
* Fix calibration for USB grabber-less configs

* Select active priority for capturing
  • Loading branch information
awawa-dev committed May 11, 2023
1 parent 38b7743 commit ca8391c
Show file tree
Hide file tree
Showing 7 changed files with 58 additions and 7 deletions.
2 changes: 2 additions & 0 deletions include/api/JsonAPI.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,8 @@ public slots:

void releaseLock();

hyperhdr::Components getActiveComponent();

private slots:
///
/// @brief Handle emits from API of a new Token request.
Expand Down
2 changes: 2 additions & 0 deletions include/base/HyperHdrInstance.h
Original file line number Diff line number Diff line change
Expand Up @@ -303,6 +303,8 @@ public slots:
///
const PriorityMuxer::InputInfo& getPriorityInfo(int priority) const;

PriorityMuxer::InputInfo getCurrentPriorityInfo();

/// #############
/// SETTINGSMANAGER
///
Expand Down
6 changes: 4 additions & 2 deletions include/utils/LutCalibrator.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
#include <algorithm>

#include <utils/Image.h>
#include <utils/Components.h>

class Logger;

Expand Down Expand Up @@ -115,14 +116,15 @@ class LutCalibrator : public QObject
static LutCalibrator* getInstance();

signals:
void assign(int checksum, ColorRgb startColor, ColorRgb endColor, bool limitedRange, double saturation, double luminance, double gammaR, double gammaG, double gammaB, int coef);
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);
void stop();
void lutCalibrationUpdate(const QJsonObject& data);

public slots:
void assignHandler(int checksum, ColorRgb startColor, ColorRgb endColor, bool limitedRange, double saturation, double luminance, double gammaR, double gammaG, double gammaB, int coef);
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);
void stopHandler();
void setVideoImage(const QString& name, const Image<ColorRgb>& image);
void setSystemImage(const QString& name, const Image<ColorRgb>& image);
void setGlobalInputImage(int priority, const Image<ColorRgb>& image, int timeout_ms, bool clearEffect = true);

private:
Expand Down
14 changes: 13 additions & 1 deletion sources/api/JsonAPI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -359,6 +359,18 @@ void JsonAPI::handleSysInfoCommand(const QJsonObject&, const QString& command, i
emit callbackMessage(result);
}

hyperhdr::Components JsonAPI::getActiveComponent()
{
PriorityMuxer::InputInfo prio;

if (QThread::currentThread() == _hyperhdr->thread())
prio = _hyperhdr->getCurrentPriorityInfo();
else
QMetaObject::invokeMethod(_hyperhdr, "getCurrentPriorityInfo", Qt::ConnectionType::BlockingQueuedConnection, Q_RETURN_ARG(PriorityMuxer::InputInfo, prio));

return prio.componentId;
}

void JsonAPI::handleServerInfoCommand(const QJsonObject& message, const QString& command, int tan)
{
try
Expand Down Expand Up @@ -1327,7 +1339,7 @@ void JsonAPI::handleLutCalibrationCommand(const QJsonObject& message, const QStr
_endColor.blue = endColor["b"].toInt(255);

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

Expand Down
6 changes: 6 additions & 0 deletions sources/base/HyperHdrInstance.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -544,6 +544,12 @@ const HyperHdrInstance::InputInfo& HyperHdrInstance::getPriorityInfo(int priorit
return _muxer.getInputInfo(priority);
}

PriorityMuxer::InputInfo HyperHdrInstance::getCurrentPriorityInfo()
{
PriorityMuxer::InputInfo val = _muxer.getInputInfo(getCurrentPriority());
return val;
}

std::list<EffectDefinition> HyperHdrInstance::getEffects() const
{
std::list<EffectDefinition> result;
Expand Down
2 changes: 1 addition & 1 deletion sources/base/schema/schema-systemGrabber.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
"title" : "edt_conf_stream_max_resolution_title",
"default" : 512,
"minimum" : 196,
"maximum" : 640,
"maximum" : 960,
"append" : "edt_append_pixel",
"required" : true,
"propertyOrder" : 7
Expand Down
33 changes: 30 additions & 3 deletions sources/utils/LutCalibrator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
#include <utils/GlobalSignals.h>
#include <utils/Logger.h>
#include <base/GrabberWrapper.h>
#include <api/JsonAPI.h>
#include <utils/ColorSys.h>
#include <base/HyperHdrIManager.h>
#include <utils/RgbTransform.h>
Expand Down Expand Up @@ -103,7 +104,7 @@ LutCalibrator* LutCalibrator::getInstance()
return instance;
}

void LutCalibrator::assignHandler(int checksum, ColorRgb startColor, ColorRgb endColor, bool limitedRange, double saturation, double luminance, double gammaR, double gammaG, double gammaB, int coef)
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)
{
if (checksum == 0)
{
Expand Down Expand Up @@ -180,8 +181,21 @@ void LutCalibrator::assignHandler(int checksum, ColorRgb startColor, ColorRgb en
_log->enable();
}

connect(GlobalSignals::getInstance(), &GlobalSignals::setVideoImage, this, &LutCalibrator::setVideoImage, Qt::ConnectionType::UniqueConnection);
connect(GlobalSignals::getInstance(), &GlobalSignals::setGlobalImage, this, &LutCalibrator::setGlobalInputImage, Qt::ConnectionType::UniqueConnection);
if (defaultComp == hyperhdr::COMP_VIDEOGRABBER)
{
Debug(_log, "Using video grabber as a source");
connect(GlobalSignals::getInstance(), &GlobalSignals::setVideoImage, this, &LutCalibrator::setVideoImage, Qt::ConnectionType::UniqueConnection);
}
else if (defaultComp == hyperhdr::COMP_SYSTEMGRABBER)
{
Debug(_log, "Using system grabber as a source");
connect(GlobalSignals::getInstance(), &GlobalSignals::setSystemImage, this, &LutCalibrator::setSystemImage, Qt::ConnectionType::UniqueConnection);
}
else
{
Debug(_log, "Using flatbuffers/protobuffers as a source");
connect(GlobalSignals::getInstance(), &GlobalSignals::setGlobalImage, this, &LutCalibrator::setGlobalInputImage, Qt::ConnectionType::UniqueConnection);
}
}
else
{
Expand Down Expand Up @@ -227,6 +241,11 @@ void LutCalibrator::setVideoImage(const QString& name, const Image<ColorRgb>& im
handleImage(image);
}

void LutCalibrator::setSystemImage(const QString& name, const Image<ColorRgb>& image)
{
handleImage(image);
}

void LutCalibrator::setGlobalInputImage(int priority, const Image<ColorRgb>& image, int timeout_ms, bool clearEffect)
{
handleImage(image);
Expand Down Expand Up @@ -868,6 +887,7 @@ bool LutCalibrator::correctionEnd()
{

disconnect(GlobalSignals::getInstance(), &GlobalSignals::setVideoImage, this, &LutCalibrator::setVideoImage);
disconnect(GlobalSignals::getInstance(), &GlobalSignals::setSystemImage, this, &LutCalibrator::setSystemImage);
disconnect(GlobalSignals::getInstance(), &GlobalSignals::setGlobalImage, this, &LutCalibrator::setGlobalInputImage);

double floor = qMax(_minColor.red, qMax(_minColor.green, _minColor.blue));
Expand Down Expand Up @@ -1140,6 +1160,12 @@ double LutCalibrator::fineTune(double& optimalRange, double& optimalScale, int&
calculated.green = ootf(calculated.green);
calculated.blue = ootf(calculated.blue);
}
else
{
calculated.red = normalized.red;
calculated.green = normalized.green;
calculated.blue = normalized.blue;
}

calculated.red = clampDouble(calculated.red, 0, 1.0) * 255.0;
calculated.green = clampDouble(calculated.green, 0, 1.0) * 255.0;
Expand Down Expand Up @@ -1213,6 +1239,7 @@ bool LutCalibrator::finalize(bool fastTrack)
if (!fastTrack)
{
disconnect(GlobalSignals::getInstance(), &GlobalSignals::setVideoImage, this, &LutCalibrator::setVideoImage);
disconnect(GlobalSignals::getInstance(), &GlobalSignals::setSystemImage, this, &LutCalibrator::setSystemImage);
disconnect(GlobalSignals::getInstance(), &GlobalSignals::setGlobalImage, this, &LutCalibrator::setGlobalInputImage);
}

Expand Down

0 comments on commit ca8391c

Please sign in to comment.