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)
51 , m_prevRunning(false)
75 PROPAGATE_ERROR(dispatcher.
createRequest(m_request, Argus::CAPTURE_INTENT_STILL_CAPTURE));
77 Argus::IRequest *iRequest = Argus::interface_cast<Argus::IRequest>(m_request.get());
79 ORIGINATE_ERROR(
"Failed to get IRequest interface");
82 Argus::IAutoControlSettings *iAutoControlSettings =
83 Argus::interface_cast<Argus::IAutoControlSettings>(iRequest->getAutoControlSettings());
84 if (!iAutoControlSettings)
85 ORIGINATE_ERROR(
"Failed to get IAutoControlSettings interface");
88 if (iAutoControlSettings->setAeLock(
true) != Argus::STATUS_OK)
89 ORIGINATE_ERROR(
"Failed to set AE lock");
92 if (iAutoControlSettings->setExposureCompensation(exposureCompensation) != Argus::STATUS_OK)
93 ORIGINATE_ERROR(
"Failed to set exposure compensation");
96 PROPAGATE_ERROR(dispatcher.
createOutputStream(m_request.get(),
false, m_outputStream));
98 Argus::IEGLOutputStream *iEGLOutputStream =
99 Argus::interface_cast<Argus::IEGLOutputStream>(m_outputStream.get());
100 if (!iEGLOutputStream)
101 ORIGINATE_ERROR(
"Failed to get IEGLOuptutStream interface");
104 PROPAGATE_ERROR(composer.
bindStream(iEGLOutputStream->getEGLStream()));
106 const Argus::Size2D<uint32_t> streamSize = iEGLOutputStream->getResolution();
108 (float)streamSize.width() / (float)streamSize.height()));
111 PROPAGATE_ERROR(dispatcher.
enableOutputStream(m_request.get(), m_outputStream.get()));
127 m_outputStream.get()));
129 Argus::IEGLOutputStream *iEGLOutputStream =
130 Argus::interface_cast<Argus::IEGLOutputStream>(m_outputStream);
131 if (!iEGLOutputStream)
132 REPORT_ERROR(
"Failed to get IEGLOutputStream interface");
135 iEGLOutputStream->disconnect();
138 PROPAGATE_ERROR_CONTINUE(composer.
unbindStream(iEGLOutputStream->getEGLStream()));
140 m_outputStream.reset();
144 PROPAGATE_ERROR_CONTINUE(m_request.reset());
161 PROPAGATE_ERROR(dispatcher.
m_deviceOpen.registerObserver(
this,
165 PROPAGATE_ERROR(dispatcher.
m_outputSize.registerObserver(
this,
183 PROPAGATE_ERROR(
stop());
191 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_outputSize.unregisterObserver(
this,
195 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_deviceOpen.unregisterObserver(
this,
213 PROPAGATE_ERROR_CONTINUE(expLevel->
shutdown());
226 PROPAGATE_ERROR(
stop());
227 PROPAGATE_ERROR(
start());
234 const bool isOpen =
static_cast<const Value<bool>&
>(source).
get();
241 PROPAGATE_ERROR(
stop());
251 PROPAGATE_ERROR(
start());
260 const bool isTrue =
static_cast<const Value<bool>&
>(source).
get();
267 PROPAGATE_ERROR(
stop());
273 PROPAGATE_ERROR(
start());
285 PROPAGATE_ERROR(
stop());
289 PROPAGATE_ERROR(
start());
297 ORIGINATE_ERROR(
"Not initialized");
303 std::ostringstream message;
305 message <<
"Creating " <<
m_exposureSteps <<
" streams with exposure compensation set to ";
308 for (uint32_t requestIndex = 0; requestIndex <
m_exposureSteps; ++requestIndex)
310 UniquePointer<ExpLevel> expLevel(
new ExpLevel);
313 ORIGINATE_ERROR(
"Out of memory");
315 const float exposureCompensation =
316 ((float)requestIndex / (
float)(m_exposureSteps - 1)) *
320 PROPAGATE_ERROR(expLevel->initialize(exposureCompensation));
324 if (requestIndex != 0)
326 message << exposureCompensation <<
" ev";
329 message <<
". " << std::endl;
334 std::vector<const Argus::Request*> requests;
340 Argus::interface_cast<Argus::IEGLOutputStream>
356 ORIGINATE_ERROR(
"Not initialized");
369 PROPAGATE_ERROR(composer.setStreamActive(
370 Argus::interface_cast<Argus::IEGLOutputStream>