Hello,
We are using TX2 and two leopard imaging IMX577 cameras. The OS of TX2 is L4T 32.5.0. Argus 0.97.3.
I found that if I set the strength of edge enhancement to say 0.15, then when I read the strength value from the meta data of the frames, its value is 0.85, which is 1 minus 0.15. I have tried multiple values with all 3 modes (EDGE_ENHANCE_MODE_OFF, EDGE_ENHANCE_MODE_FAST and EDGE_ENHANCE_MODE_HIGH_QUALITY), this applies to all of them.
Is there any reason why the strength value read from the metadata of the frame equals 1 minus the value set?
Here is how I set the edge enhancement:
bool IMX577StereoCamera::configCameraSharpness(IEdgeEnhanceSettings *iEdgeEnhanceSettings, const IMX577Sharpness& sharpnessConfig)
{
bool res = false;
Argus::Status status = STATUS_OK;
if(iEdgeEnhanceSettings != nullptr)
{
if(sharpnessConfig.m_strength >= 0 && sharpnessConfig.m_strength <= 1)
{
status = iEdgeEnhanceSettings->setEdgeEnhanceMode(*(sharpnessConfig.m_mode));
if(status == STATUS_OK)
{
status = iEdgeEnhanceSettings->setEdgeEnhanceStrength(sharpnessConfig.m_strength);
if(status == STATUS_OK)
{
res = true;
}
else
{
logAndThrow("Error setting sharpness strength", __FILE__, __LINE__);
}
}
else
{
logAndThrow("Error setting sharpness mode", __FILE__, __LINE__);
}
}
else
{
std::stringstream ss;
ss << VAR_VAL_STREAM(sharpnessConfig.m_strength) << " out of range [0,1]";
logAndThrow(ss.str(), __FILE__, __LINE__);
}
}
else
{
std::stringstream ss;
ss << "nullptr found, " << VAR_VAL_STREAM(iEdgeEnhanceSettings);
logAndThrow(ss.str(), __FILE__, __LINE__);
}
return res;
}
Here is how I read the settings from the frame:
void LIIMX577Camera::getCurCamSettings(Argus::UniqueObj<EGLStream::Frame>& frame)
{
LIIMX577CameraSetting setting;
EGLStream::IArgusCaptureMetadata *iArgusCaptureMetadata = interface_cast<EGLStream::IArgusCaptureMetadata>(frame);
if(iArgusCaptureMetadata == nullptr)
{
logAndThrow("Cannot get IArgusCaptureMetadata", __FILE__, __LINE__);
}
CaptureMetadata *metadata = iArgusCaptureMetadata->getMetadata();
if(metadata == nullptr)
{
logAndThrow("Cannot get CaptureMetadata", __FILE__, __LINE__);
}
ICaptureMetadata *iMetadata = interface_cast<ICaptureMetadata>(metadata);
if(metadata == nullptr)
{
logAndThrow("Cannot get ICaptureMetadata", __FILE__, __LINE__);
}
IEdgeEnhanceMetadata *iEdgeEnahenceMetadata = interface_cast<IEdgeEnhanceMetadata>(metadata);
if(iEdgeEnahenceMetadata == nullptr)
{
logAndThrow("Cannot get IEdgeEnhanceMetadata", __FILE__, __LINE__);
}
/* sharpness setting */
setting.m_sharpness.m_mode.reset(new Argus::EdgeEnhanceMode(iEdgeEnahenceMetadata->getEdgeEnhanceMode()));
setting.m_sharpness.m_strength = iEdgeEnahenceMetadata->getEdgeEnhanceStrength();
MMI_INFO_LOG_L << "setting.m_sharpness.m_strength" << setting.m_sharpness.m_strength;
// .... More code
}