uint32_t HimppVideoISP::WhiteBalance::getCrGain() { if (isEnabled()) { if (_mode == IVideoSource::Imaging::WhiteBalance::AUTO_WB) { ISP_AWB_ATTR_S awb_attr; if (HI_MPI_ISP_GetAWBAttr(&awb_attr) != HI_SUCCESS) throw IpcamError("Cannot get AWB mode"); return awb_attr.u8RGStrength; } } return _cr_gain; }
IVideoSource::Imaging::Exposure::ExposureMode HimppVideoSource::Imaging::Exposure::getMode() { HimppVideoISP *isp = (HimppVideoISP*)_media._vi_dev0; if (isp) { HimppVideoISP::Exposure *exposure = isp->getExposure(); if (exposure) { return exposure->getExposureMode(); } } throw IpcamError("Requested interface not supported"); }
IVideoSource::Imaging::WhiteBalance::WhiteBalanceMode HimppVideoSource::Imaging::WhiteBalance::getMode() { HimppVideoISP *isp = (HimppVideoISP *)_media._vi_dev0; if (isp) { HimppVideoISP::WhiteBalance *wb = isp->getWhiteBalance(); if (wb) { return wb->getWBMode(); } } throw IpcamError("Requested interface not supported"); }
void HimppVideoSource::Imaging::Exposure::setPriority(IVideoSource::Imaging::Exposure::ExposurePriority value) { HimppVideoISP *isp = (HimppVideoISP *)_media._vi_dev0; if (isp) { HimppVideoISP::Exposure *exposure = isp->getExposure(); if (exposure) { return exposure->setExposurePriority(value); } } throw IpcamError("Requested interface not supported"); }
HimppVideoISP::WhiteBalanceMode HimppVideoISP::WhiteBalance::getWBMode() { if (isEnabled()) { ISP_OP_TYPE_E wbmode; if (HI_MPI_ISP_GetWBType(&wbmode) == HI_SUCCESS) { WhiteBalanceMode mode = (wbmode == OP_TYPE_AUTO) ? IVideoSource::Imaging::WhiteBalance::AUTO_WB : IVideoSource::Imaging::WhiteBalance::MANUAL_WB; return mode; } throw IpcamError("get WhiteBalance mode failed"); } return _mode; }
HimppVideoISP::ExposureMode HimppVideoISP::Exposure::getExposureMode() { if (isEnabled()) { ISP_OP_TYPE_E exp_mode; if (HI_MPI_ISP_GetExposureType(&exp_mode) != HI_SUCCESS) throw IpcamError("get exposure MinGain failed"); ExposureMode mode; mode = (exp_mode == OP_TYPE_AUTO) ? IVideoSource::Imaging::Exposure::AUTO_EXPOSURE : IVideoSource::Imaging::Exposure::MANUAL_EXPOSURE; return mode; } return _mode; }
HimppVideoISP::ExposurePriority HimppVideoISP::Exposure::getExposurePriority() { if (isEnabled()) { ISP_AE_ATTR_EX_S ae_attr; if (HI_MPI_ISP_GetAEAttrEx(&ae_attr) != HI_SUCCESS) throw IpcamError("get exposure MinGain failed"); ExposurePriority priority; priority = (ae_attr.enAEMode == AE_MODE_LOW_NOISE) ? IVideoSource::Imaging::Exposure::LOWNOISE_PRIORITY : IVideoSource::Imaging::Exposure::FRAMERATE_PRIORITY; return priority; } return _priority; }
IVideoSource::Imaging::Gamma& HimppVideoSource::Imaging::getGamma() { throw IpcamError("Request interface not implemented"); }
IVideoSource::Imaging::WideDynamicRange& HimppVideoSource::Imaging::getWideDynamicRange() { throw IpcamError("Request interface not implemented"); }
IVideoSource::Imaging::Focus& HimppVideoSource::Imaging::getFocus() { throw IpcamError("Request interface not implemented"); }
IVideoSource::Imaging::Backlight& HimppVideoSource::Imaging::getBacklight() { throw IpcamError("Request interface not implemented"); }
IVideoSource::Imaging::IrCutFilterMode HimppVideoSource::Imaging::getIrCutFilterMode() { throw IpcamError("Not implemented"); }
void HimppVideoSource::Imaging::setSharpness(uint32_t value) { throw IpcamError("Not implemented"); }
uint32_t HimppVideoSource::Imaging::getSharpness() { throw IpcamError("Not implemented"); }
void HimppVideoSource::Imaging::setIrCutFilterMode (IVideoSource::Imaging::IrCutFilterMode value) { throw IpcamError("Not implemented"); }
void HimppVideoSource::setFramerate(uint32_t value) { throw IpcamError("Readonly property"); }
IVideoSource::Imaging::AntiFlicker& HimppVideoSource::Imaging::getAntiFlicker() { throw IpcamError("Request interface not implemented"); }
void HimppVideoSource::setResolution(ImageResolution &res) { throw IpcamError("Readonly property"); }
bool HimppVideoISP::enableObject() { HI_S32 s32Ret; ISP_IMAGE_ATTR_S *pstImageAttr = *video_sensor; ISP_INPUT_TIMING_S *pstInputTiming = *video_sensor; if (!loadSensorModule()) return false; if (!registerAlgorithm()) goto err_unload_mod; if ((s32Ret = HI_MPI_ISP_Init()) != HI_SUCCESS) { goto err_unreg_alg; } if (HI_MPI_ISP_SetImageAttr(pstImageAttr) != HI_SUCCESS) { goto err_exit_isp; } if (HI_MPI_ISP_SetInputTiming(pstInputTiming) != HI_SUCCESS) { goto err_exit_isp; } if (pthread_create(&isp_thread, 0, isp_thread_routine, NULL)) goto err_exit_isp; ISP_OP_TYPE_E exp_opmode; exp_opmode = (_exposure._mode == IVideoSource::Imaging::Exposure::AUTO_EXPOSURE) ? OP_TYPE_AUTO : OP_TYPE_MANUAL; if (HI_MPI_ISP_SetExposureType(exp_opmode) != HI_SUCCESS) { fprintf(stderr, "HI_MPI_ISP_SetExposureType failed\n"); } // initialize Exposure ISP_AE_ATTR_EX_S ae_attr; if (HI_MPI_ISP_GetAEAttrEx(&ae_attr) == HI_SUCCESS) { ae_attr.enAEMode = (_exposure._priority == IVideoSource::Imaging::Exposure::LOWNOISE_PRIORITY) ? \ AE_MODE_LOW_NOISE : AE_MODE_FRAME_RATE; ae_attr.u32ExpTimeMin = _exposure._min_exp_time; ae_attr.u32ExpTimeMax = _exposure._max_exp_time; ae_attr.u32AGainMin = _exposure._min_gain; ae_attr.u32AGainMax = _exposure._max_gain; if (HI_MPI_ISP_SetAEAttrEx(&ae_attr) != HI_SUCCESS) { fprintf(stderr, "HI_MPI_ISP_SetAEAttrEx failed\n"); } } ISP_ME_ATTR_EX_S me_attr; if (HI_MPI_ISP_GetMEAttrEx(&me_attr) == HI_SUCCESS) { me_attr.u32ExpLine = _exposure._exp_time; me_attr.s32AGain = _exposure._gain; if (HI_MPI_ISP_SetMEAttrEx(&me_attr) != HI_SUCCESS) { fprintf(stderr, "HI_MPI_ISP_SetMEAttrEx failed\n"); } } // Initialize WhiteBalance ISP_OP_TYPE_E wb_opmode; wb_opmode = (_whitebalance._mode == IVideoSource::Imaging::WhiteBalance::AUTO_WB) ? OP_TYPE_AUTO : OP_TYPE_MANUAL; if (HI_MPI_ISP_SetWBType(wb_opmode) != HI_SUCCESS) { fprintf(stderr, "HI_MPI_ISP_SetWBType failed\n"); } if (_whitebalance._mode == IVideoSource::Imaging::WhiteBalance::AUTO_WB) { ISP_AWB_ATTR_S awb_attr; if (HI_MPI_ISP_GetAWBAttr(&awb_attr) == HI_SUCCESS) { awb_attr.u8BGStrength = (HI_U8)_whitebalance._cb_gain; awb_attr.u8RGStrength = (HI_U8)_whitebalance._cr_gain; if (HI_MPI_ISP_SetAWBAttr(&awb_attr) != HI_SUCCESS) fprintf(stderr, "HI_MPI_ISP_SetWBType failed\n"); } } else { ISP_MWB_ATTR_S mwb_attr; if (HI_MPI_ISP_GetMWBAttr(&mwb_attr) == HI_SUCCESS) mwb_attr.u16Rgain = (HI_U16)_whitebalance._r_gain; mwb_attr.u16Ggain = (HI_U16)_whitebalance._g_gain; mwb_attr.u16Bgain = (HI_U16)_whitebalance._b_gain; if (HI_MPI_ISP_SetMWBAttr(&mwb_attr) != HI_SUCCESS) throw IpcamError("Cannot set MWB attr"); } return true; err_exit_isp: HI_MPI_ISP_Exit(); err_unreg_alg: unregisterAlgorithm(); err_unload_mod: unloadSensorModule(); return false; }