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)
75 PROPAGATE_ERROR(dispatcher.
createRequest(m_request, Argus::CAPTURE_INTENT_STILL_CAPTURE));
77 Argus::IRequest *iRequest = Argus::interface_cast<Argus::IRequest>(m_request);
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");
98 Argus::IStream *iStream = Argus::interface_cast<Argus::IStream>(m_outputStream.get());
100 ORIGINATE_ERROR(
"Failed to get IStream interface");
103 PROPAGATE_ERROR(renderer.
bindStream(iStream->getEGLStream()));
105 const Argus::Size streamSize = iStream->getResolution();
107 (float)streamSize.width / (
float)streamSize.height));
110 PROPAGATE_ERROR(dispatcher.
enableOutputStream(m_request.get(), m_outputStream.get()));
125 m_outputStream.get()));
127 const EGLStreamKHR eglStream =
128 Argus::interface_cast<Argus::IStream>(m_outputStream)->getEGLStream();
130 m_outputStream.reset();
150 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_deviceOpen.registerObserver(
this,
171 PROPAGATE_ERROR(
stop());
193 PROPAGATE_ERROR_CONTINUE(expLevel->
shutdown());
204 const bool isOpen =
static_cast<const Value<bool>&
>(source).
get();
211 PROPAGATE_ERROR(
stop());
221 PROPAGATE_ERROR(
start());
234 PROPAGATE_ERROR(
stop());
238 PROPAGATE_ERROR(
start());
246 ORIGINATE_ERROR(
"Not initialized");
252 std::ostringstream message;
254 message <<
"Creating " <<
m_exposureSteps <<
" streams with exposure compensation set to ";
257 for (uint32_t requestIndex = 0; requestIndex <
m_exposureSteps; ++requestIndex)
259 UniquePointer<ExpLevel> expLevel(
new ExpLevel);
262 ORIGINATE_ERROR(
"Out of memory");
264 const float exposureCompensation =
265 ((float)requestIndex / (
float)(m_exposureSteps - 1)) *
268 PROPAGATE_ERROR(expLevel->initialize(exposureCompensation));
272 if (requestIndex != 0)
274 message << exposureCompensation <<
" ev";
277 message <<
". " << std::endl;
282 std::vector<const Argus::Request*> requests;
288 Argus::interface_cast<Argus::IStream>(expLevel->
m_outputStream)->getEGLStream(),
true));
289 requests.push_back(expLevel->
m_request.get());
303 ORIGINATE_ERROR(
"Not initialized");
316 PROPAGATE_ERROR(renderer.setStreamActive(
317 Argus::interface_cast<Argus::IStream>(expLevel->
m_outputStream)->getEGLStream(),
false));