39 #include "UniquePointer.h"
43 #include "Validator.h"
44 #include <Argus/Ext/BayerSharpnessMap.h>
45 #include <Argus/Ext/DebugCaptureMetadata.h>
46 #include <Argus/Ext/DebugCaptureSession.h>
47 #include <Argus/Ext/DeFog.h>
48 #include <Argus/Ext/FaceDetect.h>
49 #include <Argus/Ext/SensorPrivateMetadata.h>
51 namespace ArgusSamples
67 virtual bool isInterface(Argus::Interface *interface)
const = 0;
81 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_denoiseMode.registerObserver(
this,
82 static_cast<IObserver::CallbackFunction>(
85 static_cast<IObserver::CallbackFunction>(
93 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_denoiseMode.unregisterObserver(
this,
94 static_cast<IObserver::CallbackFunction>(
97 static_cast<IObserver::CallbackFunction>(
114 ORIGINATE_ERROR(
"Failed to set the denoising mode");
130 ORIGINATE_ERROR(
"Failed to set the denoise strength");
153 static_cast<IObserver::CallbackFunction>(
156 static_cast<IObserver::CallbackFunction>(
165 static_cast<IObserver::CallbackFunction>(
168 static_cast<IObserver::CallbackFunction>(
187 ORIGINATE_ERROR(
"Failed to set the edge enhancement mode");
204 ORIGINATE_ERROR(
"Failed to set the edge enhancement strength");
226 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_vstabMode.registerObserver(
this,
227 static_cast<IObserver::CallbackFunction>(
235 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_vstabMode.unregisterObserver(
this,
236 static_cast<IObserver::CallbackFunction>(
255 ORIGINATE_ERROR(
"Failed to set the video stabilization mode");
279 static_cast<IObserver::CallbackFunction>(
281 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_gainRange.registerObserver(
this,
282 static_cast<IObserver::CallbackFunction>(
285 static_cast<IObserver::CallbackFunction>(
287 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_frameRate.registerObserver(
this,
288 static_cast<IObserver::CallbackFunction>(
290 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_focusPosition.registerObserver(
this,
291 static_cast<IObserver::CallbackFunction>(
300 static_cast<IObserver::CallbackFunction>(
302 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_gainRange.unregisterObserver(
this,
303 static_cast<IObserver::CallbackFunction>(
306 static_cast<IObserver::CallbackFunction>(
308 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_frameRate.unregisterObserver(
this,
309 static_cast<IObserver::CallbackFunction>(
311 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_focusPosition.unregisterObserver(
this,
312 static_cast<IObserver::CallbackFunction>(
331 ORIGINATE_ERROR(
"Failed to set exposure time range");
346 ORIGINATE_ERROR(
"Failed to set gain range");
359 Argus::SensorMode *sensorMode = NULL;
363 ORIGINATE_ERROR(
"Failed to set sensor mode");
379 ORIGINATE_ERROR(
"Failed to set focus position");
393 Argus::Range<uint64_t> frameDurationRangeNs(0);
399 Argus::SensorMode *sensorMode = NULL;
403 Argus::ISensorMode *iSensorMode =
404 Argus::interface_cast<Argus::ISensorMode>(sensorMode);
406 frameDurationRangeNs = iSensorMode->getFrameDurationRange();
411 frameDurationRangeNs =
415 if (
m_iSourceSettings->setFrameDurationRange(frameDurationRangeNs) != Argus::STATUS_OK)
416 ORIGINATE_ERROR(
"Failed to set frame duration range");
439 static_cast<IObserver::CallbackFunction>(
441 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_aeLock.registerObserver(
this,
442 static_cast<IObserver::CallbackFunction>(
444 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_awbLock.registerObserver(
this,
445 static_cast<IObserver::CallbackFunction>(
447 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_awbMode.registerObserver(
this,
448 static_cast<IObserver::CallbackFunction>(
451 static_cast<IObserver::CallbackFunction>(
460 static_cast<IObserver::CallbackFunction>(
462 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_aeLock.unregisterObserver(
this,
463 static_cast<IObserver::CallbackFunction>(
465 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_awbLock.unregisterObserver(
this,
466 static_cast<IObserver::CallbackFunction>(
468 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_awbMode.unregisterObserver(
this,
469 static_cast<IObserver::CallbackFunction>(
472 static_cast<IObserver::CallbackFunction>(
491 ORIGINATE_ERROR(
"Failed to set the AE antibanding mode");
503 assert(&source == &dispatcher.
m_aeLock);
506 ORIGINATE_ERROR(
"Failed to set the AE lock");
517 assert(&source == &dispatcher.
m_awbLock);
520 ORIGINATE_ERROR(
"Failed to set the AWB lock");
531 assert(&source == &dispatcher.
m_awbMode);
534 ORIGINATE_ERROR(
"Failed to set the AWB mode");
550 ORIGINATE_ERROR(
"Failed to set the exposure compensation");
573 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_deFogEnable.registerObserver(
this,
575 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_deFogAmount.registerObserver(
this,
577 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_deFogQuality.registerObserver(
this,
585 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_deFogEnable.unregisterObserver(
this,
587 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_deFogAmount.unregisterObserver(
this,
589 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_deFogQuality.unregisterObserver(
this,
619 ORIGINATE_ERROR(
"Failed to set the DeFog amount");
633 ORIGINATE_ERROR(
"Failed to set the DeFog quality");
644 static const ValidatorEnum<Argus::DenoiseMode>::ValueStringPair s_denoiseModes[] =
646 { Argus::DENOISE_MODE_OFF,
"off" },
647 { Argus::DENOISE_MODE_FAST,
"fast" },
648 { Argus::DENOISE_MODE_HIGH_QUALITY,
"highquality" }
652 static const ValidatorEnum<Argus::EdgeEnhanceMode>::ValueStringPair s_edgeEnhanceModes[] =
654 { Argus::EDGE_ENHANCE_MODE_OFF,
"off" },
655 { Argus::EDGE_ENHANCE_MODE_FAST,
"fast" },
656 { Argus::EDGE_ENHANCE_MODE_HIGH_QUALITY,
"highquality" }
660 static const ValidatorEnum<Argus::VideoStabilizationMode>::ValueStringPair s_vstabModes[] =
662 { Argus::VIDEO_STABILIZATION_MODE_OFF,
"off" },
663 { Argus::VIDEO_STABILIZATION_MODE_ON,
"on" }
667 static const ValidatorEnum<Argus::AeAntibandingMode>::ValueStringPair s_aeAntibandingModes[] =
669 { Argus::AE_ANTIBANDING_MODE_OFF,
"off" },
670 { Argus::AE_ANTIBANDING_MODE_AUTO,
"auto" },
671 { Argus::AE_ANTIBANDING_MODE_50HZ,
"50hz" },
672 { Argus::AE_ANTIBANDING_MODE_60HZ,
"60hz" }
676 static const ValidatorEnum<Argus::AwbMode>::ValueStringPair s_awbModes[] =
678 { Argus::AWB_MODE_OFF,
"off" },
679 { Argus::AWB_MODE_AUTO,
"auto" },
680 { Argus::AWB_MODE_INCANDESCENT,
"incandescent" },
681 { Argus::AWB_MODE_FLUORESCENT,
"fluorescent" },
682 { Argus::AWB_MODE_WARM_FLUORESCENT,
"warmfluorescent" },
683 { Argus::AWB_MODE_DAYLIGHT,
"daylight" },
684 { Argus::AWB_MODE_CLOUDY_DAYLIGHT,
"cloudydaylight" },
685 { Argus::AWB_MODE_TWILIGHT,
"twilight" },
686 { Argus::AWB_MODE_SHADE,
"shade" },
687 { Argus::AWB_MODE_MANUAL,
"manual" }
691 static const ValidatorEnum<VideoPipeline::VideoFormat>::ValueStringPair s_videoFormats[] =
701 static const ValidatorEnum<VideoPipeline::VideoFileType>::ValueStringPair s_videoFileTypes[] =
710 static const Argus::Size s_outputSizes[] =
713 Argus::Size(176, 144),
714 Argus::Size(320, 240),
715 Argus::Size(640, 480),
716 Argus::Size(1280, 720),
717 Argus::Size(1920, 1080),
718 Argus::Size(3840, 2160),
722 : m_deviceFocusPositionRange(0)
723 , m_sensorExposureTimeRange(Argus::Range<uint64_t>(0))
724 , m_sensorAnalogGainRange(Argus::Range<float>(0.0f))
725 , m_sensorFrameRateRange(0.0f)
726 , m_deviceIndex(new ValidatorStdVector<uint32_t, Argus::CameraDevice*>(&m_cameraDevices), 0)
727 , m_deviceOpen(false)
730 , m_exposureTimeRange(new ValidatorRange<Argus::Range<uint64_t> >(&m_sensorExposureTimeRange),
731 Argus::Range<uint64_t>(0))
732 , m_gainRange(new ValidatorRange<Argus::Range<float > >(&m_sensorAnalogGainRange),
733 Argus::Range<float>(0.0f))
734 , m_sensorModeIndex(new ValidatorEnum<uint32_t>(), 0)
735 , m_frameRate(new ValidatorRange<float>(&m_sensorFrameRateRange), 0.0f)
736 , m_focusPosition(new ValidatorRange<int32_t>(&m_deviceFocusPositionRange), 0)
737 , m_denoiseMode(new ValidatorEnum<Argus::DenoiseMode>(
738 s_denoiseModes, sizeof(s_denoiseModes) / sizeof(s_denoiseModes[0])),
739 Argus::DENOISE_MODE_OFF)
740 , m_denoiseStrength(new ValidatorRange<float>(0.0f, 1.0f), 1.0f)
741 , m_edgeEnhanceMode(new ValidatorEnum<Argus::EdgeEnhanceMode>(
742 s_edgeEnhanceModes, sizeof(s_edgeEnhanceModes) / sizeof(s_edgeEnhanceModes[0])),
743 Argus::EDGE_ENHANCE_MODE_OFF)
744 , m_edgeEnhanceStrength(new ValidatorRange<float>(0.0f, 1.0f), 1.0f)
745 , m_vstabMode(new ValidatorEnum<Argus::VideoStabilizationMode>(
746 s_vstabModes, sizeof(s_vstabModes) / sizeof(s_vstabModes[0])),
747 Argus::VIDEO_STABILIZATION_MODE_OFF)
748 , m_aeAntibandingMode(new ValidatorEnum<Argus::AeAntibandingMode>(
749 s_aeAntibandingModes, sizeof(s_aeAntibandingModes) / sizeof(s_aeAntibandingModes[0])),
750 Argus::AE_ANTIBANDING_MODE_AUTO)
753 , m_awbMode(new ValidatorEnum<Argus::AwbMode>(
754 s_awbModes, sizeof(s_awbModes) / sizeof(s_awbModes[0])),
755 Argus::AWB_MODE_AUTO)
756 , m_exposureCompensation(new ValidatorRange<float>(-10.0f, 10.0f), 0.0f)
757 , m_videoFormat(new ValidatorEnum<
VideoPipeline::VideoFormat>(
758 s_videoFormats, sizeof(s_videoFormats) / sizeof(s_videoFormats[0])),
760 , m_videoFileType(new ValidatorEnum<
VideoPipeline::VideoFileType>(
761 s_videoFileTypes, sizeof(s_videoFileTypes) / sizeof(s_videoFileTypes[0])),
763 , m_videoBitRate(new ValidatorRange<uint32_t>(0, std::numeric_limits<uint32_t>::max()), 0)
764 , m_outputSize(new ValidatorSize(s_outputSizes,
765 sizeof(s_outputSizes) / sizeof(s_outputSizes[0]), true ),
768 , m_deFogEnable(false)
769 , m_deFogAmount(new ValidatorRange<float>(0.0f, 1.0f), 0.9f)
770 , m_deFogQuality(new ValidatorRange<float>(0.0f, 1.0f), 0.14285f)
771 , m_initialized(false)
772 , m_iCameraProvider(NULL)
780 REPORT_ERROR(
"Failed to shutdown");
785 static InitOnce initOnce;
788 if (initOnce.begin())
797 REPORT_ERROR(
"Initalization failed");
810 m_cameraProvider = Argus::UniqueObj<Argus::CameraProvider>(Argus::CameraProvider::create());
812 if (!m_iCameraProvider)
813 ORIGINATE_ERROR(
"Failed to create CameraProvider");
820 ORIGINATE_ERROR(
"No cameras available");
827 PROPAGATE_ERROR_CONTINUE(
m_deviceIndex.registerObserver(
this,
847 assert(
static_cast<const Value<uint32_t>&
>(source).
get() ==
m_deviceIndex);
861 const Argus::ICameraProperties *iCameraProperties =
863 if (!iCameraProperties)
864 ORIGINATE_ERROR(
"Failed to get ICameraProperties interface");
867 if (iCameraProperties->getSensorModes(&
m_sensorModes) != Argus::STATUS_OK)
868 ORIGINATE_ERROR(
"Failed to get sensor modes");
871 ORIGINATE_ERROR(
"No sensor modes found");
877 std::vector<ValidatorEnum<uint32_t>::ValueStringPair> valueStringPairs;
879 for (
size_t index = 0; index <
m_sensorModes.size(); ++index)
881 Argus::ISensorMode *sensorMode =
882 Argus::interface_cast<Argus::ISensorMode>(
m_sensorModes[index]);
884 valueStringPairs[index].value = (uint32_t)index;
886 std::ostringstream stream;
887 stream << index+1 <<
": "
888 << sensorMode->getResolution().width <<
"x" << sensorMode->getResolution().height;
890 valueStringPairs[index].string = stream.str();
893 ValidatorEnum<uint32_t> *validator =
895 PROPAGATE_ERROR(validator->setValidValues(valueStringPairs.data(), valueStringPairs.size()));
911 Argus::ISensorMode *iSensorMode =
914 ORIGINATE_ERROR(
"Failed to get ISensorMode interface");
917 Argus::Range<uint64_t> sensorExposureTimeRange = iSensorMode->getExposureTimeRange();
918 Argus::Range<float> sensorAnalogGainRange = iSensorMode->getAnalogGainRange();
919 Argus::Range<TimeValue> sensorFrameDurationRange(
922 Argus::Range<float> sensorFrameRateRange(
923 sensorFrameDurationRange.max.toCyclesPerSec(),
924 sensorFrameDurationRange.min.toCyclesPerSec());
927 Argus::Range<uint64_t> unifiedSensorExposureTimeRange(0);
928 unifiedSensorExposureTimeRange.min =
930 unifiedSensorExposureTimeRange.max =
932 Argus::Range<float> unifiedSensorAnalogGainRange(0);
933 unifiedSensorAnalogGainRange.min =
935 unifiedSensorAnalogGainRange.max =
937 Argus::Range<float> unifiedSensorFrameRateRange(0.0f);
938 unifiedSensorFrameRateRange.min =
940 unifiedSensorFrameRateRange.max =
944 Argus::Range<Argus::Range<uint64_t> >(unifiedSensorExposureTimeRange)));
946 Argus::Range<Argus::Range<float> >(unifiedSensorAnalogGainRange)));
951 PROPAGATE_ERROR(
m_gainRange.set(sensorAnalogGainRange));
952 PROPAGATE_ERROR(
m_frameRate.set(sensorFrameRateRange.max));
956 sensorExposureTimeRange, sensorExposureTimeRange)));
958 sensorAnalogGainRange, sensorAnalogGainRange)));
971 std::ostringstream stream;
975 stream <<
"Argus extensions:" << std::endl;
976 stream <<
" BayerSharpnessMap: " <<
978 "supported" :
"not supported") << std::endl;
979 stream <<
" DebugCaptureMetadata: " <<
981 "supported" :
"not supported") << std::endl;
982 stream <<
" DebugCaptureSession: " <<
984 "supported" :
"not supported") << std::endl;
985 stream <<
" DeFog: " <<
987 "supported" :
"not supported") << std::endl;
988 stream <<
" FaceDetect: " <<
990 "supported" :
"not supported") << std::endl;
991 stream <<
" SensorPrivateMetadata: " <<
993 "supported" :
"not supported") << std::endl;
995 stream <<
"Number of camera devices: " <<
m_cameraDevices.size() << std::endl;
997 for (uint32_t deviceIndex = 0; deviceIndex <
m_cameraDevices.size(); ++deviceIndex)
999 stream <<
"Device: " << deviceIndex << std::endl;
1001 const Argus::ICameraProperties *iCameraProperties =
1002 Argus::interface_cast<Argus::ICameraProperties>(
m_cameraDevices[deviceIndex]);
1003 if (!iCameraProperties)
1004 ORIGINATE_ERROR(
"Failed to get ICameraProperties interface");
1006 stream <<
" Max AE Regions: " <<
1007 iCameraProperties->getMaxAeRegions() << std::endl;
1008 stream <<
" Max AWB Regions: " <<
1009 iCameraProperties->getMaxAwbRegions() << std::endl;
1010 stream <<
" Focus Position Range: " <<
1011 iCameraProperties->getFocusPositionRange().min <<
" - " <<
1012 iCameraProperties->getFocusPositionRange().max << std::endl;
1013 stream <<
" Lens Aperture Range: " <<
1014 iCameraProperties->getLensApertureRange().min <<
" - " <<
1015 iCameraProperties->getLensApertureRange().max << std::endl;
1018 std::vector<Argus::SensorMode*> sensorModes;
1019 iCameraProperties->getSensorModes(&sensorModes);
1020 stream <<
" Number of sensor modes: " << sensorModes.size() << std::endl;
1021 for (uint32_t sensorModeIndex = 0; sensorModeIndex < sensorModes.size(); ++sensorModeIndex)
1023 Argus::ISensorMode *sensorMode =
1024 Argus::interface_cast<Argus::ISensorMode>(sensorModes[sensorModeIndex]);
1026 ORIGINATE_ERROR(
"Failed to get ISensorMode interface");
1030 sensorMode->getFrameDurationRange().min).toCyclesPerSec();
1032 sensorMode->getFrameDurationRange().max).toCyclesPerSec();
1034 stream <<
" Sensor mode: " << sensorModeIndex << std::endl;
1035 stream <<
" Resolution: " <<
1036 sensorMode->getResolution().width <<
"x" <<
1037 sensorMode->getResolution().height << std::endl;
1038 stream <<
" Exposure time range: " <<
1039 sensorMode->getExposureTimeRange().min <<
" - " <<
1040 sensorMode->getExposureTimeRange().max <<
" ns" << std::endl;
1041 stream <<
" Frame duration range: " <<
1042 sensorMode->getFrameDurationRange().min <<
" - " <<
1043 sensorMode->getFrameDurationRange().max <<
" ns" << std::endl;
1044 stream <<
" Framerate range: " <<
1045 minimum_fps <<
" - " <<
1046 maximum_fps <<
" fps" << std::endl;
1047 stream <<
" Analog gain range: " <<
1048 sensorMode->getAnalogGainRange().min <<
" - " <<
1049 sensorMode->getAnalogGainRange().max << std::endl;
1050 stream << std::endl;
1054 info = stream.str();
1064 ORIGINATE_ERROR(
"Invalid sensor mode index");
1084 uint32_t deviceIndex)
1089 ORIGINATE_ERROR(
"Invalid device index");
1096 session = Argus::UniqueObj<Argus::CaptureSession>(
1099 ORIGINATE_ERROR(
"Failed to create CaptureSession");
1105 Argus::CaptureSession *session)
1114 Argus::IEventProvider *iEventProvider = Argus::interface_cast<Argus::IEventProvider>(session);
1115 if (!iEventProvider)
1116 ORIGINATE_ERROR(
"Failed to get iEventProvider interface");
1119 const Argus::Status status = iEventProvider->waitForEvents(eventQueue, timeout.
toNSec());
1120 if ((status != Argus::STATUS_OK) && (status != Argus::STATUS_TIMEOUT))
1121 ORIGINATE_ERROR(
"Failed to get events");
1153 Argus::CaptureIntent captureIntent, Argus::CaptureSession *session)
1162 Argus::ICaptureSession *iCaptureSession =
1163 Argus::interface_cast<Argus::ICaptureSession>(session);
1164 if (!iCaptureSession)
1165 ORIGINATE_ERROR(
"Failed to get ICaptureSession interface");
1168 Argus::UniqueObj<Argus::Request> newRequest =
1169 Argus::UniqueObj<Argus::Request>(iCaptureSession->createRequest(captureIntent));
1171 ORIGINATE_ERROR(
"Failed to create request");
1174 Argus::IRequest *iRequest = Argus::interface_cast<Argus::IRequest>(newRequest);
1176 ORIGINATE_ERROR(
"Failed to get IRequest interface");
1179 Argus::ISourceSettings *iSourceSettings =
1180 Argus::interface_cast<Argus::ISourceSettings>(iRequest->getSourceSettings());
1181 if (!iSourceSettings)
1182 ORIGINATE_ERROR(
"Failed to get ISourceSettings interface");
1188 Argus::IAutoControlSettings *iAutoControlSettings =
1189 Argus::interface_cast<Argus::IAutoControlSettings>(iRequest->getAutoControlSettings());
1190 if (!iAutoControlSettings)
1191 ORIGINATE_ERROR(
"Failed to get IAutoControlSettings interface");
1197 Argus::IDenoiseSettings *iDenoiseSettings =
1198 Argus::interface_cast<Argus::IDenoiseSettings>(newRequest);
1199 if (!iDenoiseSettings)
1200 ORIGINATE_ERROR(
"Failed to get IDenoiseSettings interface");
1204 Argus::IEdgeEnhanceSettings *iEdgeEnhanceSettings =
1205 Argus::interface_cast<Argus::IEdgeEnhanceSettings>(newRequest);
1206 if (!iEdgeEnhanceSettings)
1207 ORIGINATE_ERROR(
"Failed to get IEdgeEnhanceSettings interface");
1211 Argus::IVideoStabilizationSettings *iVideoStabilizationSettings =
1212 Argus::interface_cast<Argus::IVideoStabilizationSettings>(newRequest);
1213 if (!iVideoStabilizationSettings)
1214 ORIGINATE_ERROR(
"Failed to get IVideoStabilizationSettings interface");
1220 Argus::Ext::IDeFogSettings *iDeFogSettings =
1221 Argus::interface_cast<Argus::Ext::IDeFogSettings>(newRequest);
1229 request.reset(newRequest.release());
1236 Argus::IRequest *iRequest = Argus::interface_cast<Argus::IRequest>(request.get());
1238 ORIGINATE_ERROR(
"Failed to get IRequest interface");
1241 Argus::ISourceSettings *iSourceSettings =
1242 Argus::interface_cast<Argus::ISourceSettings>(iRequest->getSourceSettings());
1243 if (!iSourceSettings)
1244 ORIGINATE_ERROR(
"Failed to get ISourceSettings interface");
1250 Argus::IAutoControlSettings *iAutoControlSettings =
1251 Argus::interface_cast<Argus::IAutoControlSettings>(iRequest->getAutoControlSettings());
1252 if (!iAutoControlSettings)
1253 ORIGINATE_ERROR(
"Failed to get IAutoControlSettings interface");
1259 Argus::IDenoiseSettings *iDenoiseSettings =
1260 Argus::interface_cast<Argus::IDenoiseSettings>(request);
1261 if (!iDenoiseSettings)
1262 ORIGINATE_ERROR(
"Failed to get IDenoiseSettings interface");
1266 Argus::IEdgeEnhanceSettings *iEdgeEnhanceSettings =
1267 Argus::interface_cast<Argus::IEdgeEnhanceSettings>(request);
1268 if (!iEdgeEnhanceSettings)
1269 ORIGINATE_ERROR(
"Failed to get IEdgeEnhanceSettings interface");
1273 Argus::IVideoStabilizationSettings *iVideoStabilizationSettings =
1274 Argus::interface_cast<Argus::IVideoStabilizationSettings>(request);
1275 if (!iVideoStabilizationSettings)
1276 ORIGINATE_ERROR(
"Failed to get IVideoStabilizationSettings interface");
1282 Argus::Ext::IDeFogSettings *iDeFogSettings =
1283 Argus::interface_cast<Argus::Ext::IDeFogSettings>(request);
1297 Argus::UniqueObj<Argus::EventQueue>& eventQueue, Argus::CaptureSession *session)
1306 Argus::IEventProvider *iEventProvider =
1307 Argus::interface_cast<Argus::IEventProvider>(session);
1308 if (!iEventProvider)
1309 ORIGINATE_ERROR(
"Failed to get IEventProvider interface");
1311 Argus::EventQueue *newEventQueue = iEventProvider->createEventQueue(eventTypes);
1313 ORIGINATE_ERROR(
"Failed to create eventQueue");
1315 eventQueue.reset(newEventQueue);
1329 Argus::ICaptureSession *iCaptureSession =
1330 Argus::interface_cast<Argus::ICaptureSession>(session);
1331 if (!iCaptureSession)
1332 ORIGINATE_ERROR(
"Failed to get ICaptureSession interface");
1334 if (iCaptureSession->capture(request, Argus::TIMEOUT_INFINITE) == 0)
1335 ORIGINATE_ERROR(
"Failed to submit the still capture request");
1349 Argus::ICaptureSession *iCaptureSession =
1350 Argus::interface_cast<Argus::ICaptureSession>(session);
1351 if (!iCaptureSession)
1352 ORIGINATE_ERROR(
"Failed to get ICaptureSession interface");
1354 if (iCaptureSession->repeat(request) != Argus::STATUS_OK)
1355 ORIGINATE_ERROR(
"Failed to submit repeating capture request");
1363 Argus::CaptureSession *session)
1372 Argus::ICaptureSession *iCaptureSession =
1373 Argus::interface_cast<Argus::ICaptureSession>(session);
1374 if (!iCaptureSession)
1375 ORIGINATE_ERROR(
"Failed to get ICaptureSession interface");
1377 if (iCaptureSession->repeatBurst(requestList) != Argus::STATUS_OK)
1378 ORIGINATE_ERROR(
"Failed to submit repeating burst request");
1394 Argus::ICaptureSession *iCaptureSession =
1395 Argus::interface_cast<Argus::ICaptureSession>(session);
1396 if (!iCaptureSession)
1397 ORIGINATE_ERROR(
"Failed to get ICaptureSession interface");
1399 iCaptureSession->stopRepeat();
1413 Argus::ICaptureSession *iCaptureSession =
1414 Argus::interface_cast<Argus::ICaptureSession>(session);
1415 if (!iCaptureSession)
1416 ORIGINATE_ERROR(
"Failed to get ICaptureSession interface");
1418 iCaptureSession->stopRepeat();
1421 ORIGINATE_ERROR(
"Failed to submit repeating burst request");
1436 Argus::ICaptureSession *iCaptureSession =
1437 Argus::interface_cast<Argus::ICaptureSession>(session);
1438 if (!iCaptureSession)
1440 REPORT_ERROR(
"Failed to get ICaptureSession interface");
1444 return iCaptureSession->maxBurstRequests();
1456 Argus::ICaptureSession *iCaptureSession =
1457 Argus::interface_cast<Argus::ICaptureSession>(session);
1458 if (!iCaptureSession)
1459 ORIGINATE_ERROR(
"Failed to get ICaptureSession interface");
1461 if (iCaptureSession->waitForIdle() != Argus::STATUS_OK)
1462 ORIGINATE_ERROR(
"Waiting for idle failed");
1475 Argus::ISensorMode *sensorMode =
1478 ORIGINATE_ERROR(
"Failed to get ISensorMode interface");
1479 *size = sensorMode->getResolution();
1490 Argus::UniqueObj<Argus::OutputStream> &stream, Argus::CaptureSession *session)
1499 Argus::IRequest *iRequest = Argus::interface_cast<Argus::IRequest>(request);
1501 ORIGINATE_ERROR(
"Failed to get IRequest interface");
1503 Argus::Size outputSize;
1506 Argus::ICaptureSession *iCaptureSession =
1507 Argus::interface_cast<Argus::ICaptureSession>(session);
1508 if (!iCaptureSession)
1509 ORIGINATE_ERROR(
"Failed to get ICaptureSession interface");
1511 Argus::UniqueObj<Argus::OutputStreamSettings> outputStreamSettings(
1512 iCaptureSession->createOutputStreamSettings());
1513 Argus::IOutputStreamSettings* iOutputStreamSettings =
1514 Argus::interface_cast<Argus::IOutputStreamSettings>(outputStreamSettings);
1515 if (!iOutputStreamSettings)
1516 ORIGINATE_ERROR(
"Failed to get IOutputStreamSettings interface");
1518 iOutputStreamSettings->setPixelFormat(Argus::PIXEL_FMT_YCbCr_420_888);
1519 iOutputStreamSettings->setResolution(outputSize);
1522 Argus::UniqueObj<Argus::OutputStream> outputStream(
1523 iCaptureSession->createOutputStream(outputStreamSettings.get()));
1525 ORIGINATE_ERROR(
"Failed to create OutputStream");
1527 stream.reset(outputStream.release());
1534 Argus::IRequest *iRequest = Argus::interface_cast<Argus::IRequest>(request);
1536 ORIGINATE_ERROR(
"Failed to get IRequest interface");
1539 if (iRequest->enableOutputStream(stream) != Argus::STATUS_OK)
1540 ORIGINATE_ERROR(
"Failed to enable the output stream");
1547 Argus::IRequest *iRequest = Argus::interface_cast<Argus::IRequest>(request);
1549 ORIGINATE_ERROR(
"Failed to get IRequest interface");
1552 if (iRequest->disableOutputStream(stream) != Argus::STATUS_OK)
1553 ORIGINATE_ERROR(
"Failed to disable the output stream");
1560 UniquePointer<DenoiseSettingsObserver> denoiseSettings;
1563 if (!denoiseSettings)
1564 ORIGINATE_ERROR(
"Out of memory");
1566 m_observers.push_front(denoiseSettings.release());
1572 UniquePointer<EdgeEnhanceSettingsObserver> edgeEnhanceSettings;
1575 if (!edgeEnhanceSettings)
1576 ORIGINATE_ERROR(
"Out of memory");
1578 m_observers.push_front(edgeEnhanceSettings.release());
1584 UniquePointer<VideoStabilizationSettingsObserver> vStabSettings;
1588 ORIGINATE_ERROR(
"Out of memory");
1596 UniquePointer<SourceSettingsObserver> sourceSettings;
1599 if (!sourceSettings)
1600 ORIGINATE_ERROR(
"Out of memory");
1608 UniquePointer<AutoControlSettingsObserver> autoControlSettings;
1611 if (!autoControlSettings)
1612 ORIGINATE_ERROR(
"Out of memory");
1614 m_observers.push_front(autoControlSettings.release());
1620 UniquePointer<DeFogSettingsObserver> deFogSettings;
1624 ORIGINATE_ERROR(
"Out of memory");
1632 for (std::list<IObserverForInterface*>::iterator it =
m_observers.begin();
1635 if ((*it)->isInterface(interface))
1643 ORIGINATE_ERROR(
"Observer not found");
1652 va_start(list, msg);
1654 if (vprintf(msg, list) < 0)
1655 ORIGINATE_ERROR(
"Failed to print message");