35 #include "UniquePointer.h"
37 namespace ArgusSamples
41 : m_exposureStepsRange(3)
42 , m_exposureSteps(new ValidatorRange<uint32_t>(&m_exposureStepsRange), 3)
44 new ValidatorRange<Argus::Range<float> >(
45 Argus::Range<float>(-10.0f, 10.0f),
46 Argus::Range<float>(-10.0f, 10.0f)),
47 Argus::Range<float>(-2.0f, 2.0f))
48 , m_initialized(false)
74 PROPAGATE_ERROR(dispatcher.
createRequest(m_request, Argus::CAPTURE_INTENT_STILL_CAPTURE));
76 Argus::IRequest *iRequest = Argus::interface_cast<Argus::IRequest>(m_request.get());
78 ORIGINATE_ERROR(
"Failed to get IRequest interface");
81 Argus::IAutoControlSettings *iAutoControlSettings =
82 Argus::interface_cast<Argus::IAutoControlSettings>(iRequest->getAutoControlSettings());
83 if (!iAutoControlSettings)
84 ORIGINATE_ERROR(
"Failed to get IAutoControlSettings interface");
87 if (iAutoControlSettings->setAeLock(
true) != Argus::STATUS_OK)
88 ORIGINATE_ERROR(
"Failed to set AE lock");
91 if (iAutoControlSettings->setExposureCompensation(exposureCompensation) != Argus::STATUS_OK)
92 ORIGINATE_ERROR(
"Failed to set exposure compensation");
95 PROPAGATE_ERROR(dispatcher.
createOutputStream(m_request.get(),
false, m_outputStream));
97 Argus::IStream *iStream = Argus::interface_cast<Argus::IStream>(m_outputStream.get());
99 ORIGINATE_ERROR(
"Failed to get IStream interface");
102 PROPAGATE_ERROR(composer.
bindStream(iStream->getEGLStream()));
104 const Argus::Size2D<uint32_t> streamSize = iStream->getResolution();
106 (float)streamSize.width() / (float)streamSize.height()));
109 PROPAGATE_ERROR(dispatcher.
enableOutputStream(m_request.get(), m_outputStream.get()));
125 m_outputStream.get()));
127 Argus::IStream *iStream = Argus::interface_cast<Argus::IStream>(m_outputStream);
129 REPORT_ERROR(
"Failed to get IStream interface");
132 iStream->disconnect();
135 PROPAGATE_ERROR_CONTINUE(composer.
unbindStream(iStream->getEGLStream()));
137 m_outputStream.reset();
141 PROPAGATE_ERROR_CONTINUE(m_request.reset());
158 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_deviceOpen.registerObserver(
this,
162 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_outputSize.registerObserver(
this,
178 PROPAGATE_ERROR(
stop());
186 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_outputSize.unregisterObserver(
this,
190 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_deviceOpen.unregisterObserver(
this,
206 PROPAGATE_ERROR_CONTINUE(expLevel->
shutdown());
219 PROPAGATE_ERROR(
stop());
220 PROPAGATE_ERROR(
start());
227 const bool isOpen =
static_cast<const Value<bool>&
>(source).
get();
234 PROPAGATE_ERROR(
stop());
244 PROPAGATE_ERROR(
start());
257 PROPAGATE_ERROR(
stop());
261 PROPAGATE_ERROR(
start());
269 ORIGINATE_ERROR(
"Not initialized");
275 std::ostringstream message;
277 message <<
"Creating " <<
m_exposureSteps <<
" streams with exposure compensation set to ";
280 for (uint32_t requestIndex = 0; requestIndex <
m_exposureSteps; ++requestIndex)
282 UniquePointer<ExpLevel> expLevel(
new ExpLevel);
285 ORIGINATE_ERROR(
"Out of memory");
287 const float exposureCompensation =
288 ((float)requestIndex / (
float)(m_exposureSteps - 1)) *
292 PROPAGATE_ERROR(expLevel->initialize(exposureCompensation));
296 if (requestIndex != 0)
298 message << exposureCompensation <<
" ev";
301 message <<
". " << std::endl;
306 std::vector<const Argus::Request*> requests;
312 Argus::interface_cast<Argus::IStream>(expLevel->
m_outputStream)->getEGLStream(),
true));
327 ORIGINATE_ERROR(
"Not initialized");
340 PROPAGATE_ERROR(composer.setStreamActive(
341 Argus::interface_cast<Argus::IStream>(expLevel->
m_outputStream)->getEGLStream(),
false));