35 #include "UniquePointer.h"
39 namespace ArgusSamples
43 : m_initialized(false)
45 , m_prevRunning(false)
68 ORIGINATE_ERROR(
"Out of memory");
76 PROPAGATE_ERROR(dispatcher.
createSession(m_session, deviceIndex));
77 PROPAGATE_ERROR(m_perfTracker->setSession(m_session.get()));
80 PROPAGATE_ERROR(dispatcher.
createRequest(m_request, Argus::CAPTURE_INTENT_STILL_CAPTURE,
88 Argus::IEGLOutputStream *iEGLOutputStream =
89 Argus::interface_cast<Argus::IEGLOutputStream>(m_outputStream.get());
90 if (!iEGLOutputStream)
91 ORIGINATE_ERROR(
"Failed to get IEGLOutputStream interface");
94 PROPAGATE_ERROR(composer.bindStream(iEGLOutputStream->getEGLStream()));
96 const Argus::Size2D<uint32_t> streamSize = iEGLOutputStream->getResolution();
97 PROPAGATE_ERROR(composer.setStreamAspectRatio(iEGLOutputStream->getEGLStream(),
98 (float)streamSize.width() / (float)streamSize.height()));
101 PROPAGATE_ERROR(dispatcher.
enableOutputStream(m_request.get(), m_outputStream.get()));
112 Argus::interface_cast<Argus::IEGLOutputStream>(m_outputStream)->getEGLStream(),
true));
128 PROPAGATE_ERROR(dispatcher.stopRepeat(m_session.get()));
130 Argus::interface_cast<Argus::IEGLOutputStream>(m_outputStream)->getEGLStream(),
false));
131 PROPAGATE_ERROR(dispatcher.waitForIdle(m_session.get()));
148 m_outputStream.get()));
150 Argus::IEGLOutputStream *iEGLOutputStream =
151 Argus::interface_cast<Argus::IEGLOutputStream>(m_outputStream);
152 if (!iEGLOutputStream)
153 REPORT_ERROR(
"Failed to get IEGLOutputStream interface");
156 iEGLOutputStream->disconnect();
159 PROPAGATE_ERROR_CONTINUE(composer.
unbindStream(iEGLOutputStream->getEGLStream()));
161 m_outputStream.reset();
165 PROPAGATE_ERROR_CONTINUE(m_request.reset());
197 PROPAGATE_ERROR(
stop());
217 PROPAGATE_ERROR_CONTINUE(session->
shutdown());
237 if (deviceCount == 0)
238 ORIGINATE_ERROR(
"No camera devices found");
240 std::vector<uint32_t> devices;
247 std::sort(devices.begin(), devices.end());
250 if (devices.back() >= deviceCount)
251 ORIGINATE_ERROR(
"index %u is out of range [0 - %u)", devices.back(), deviceCount);
254 std::vector<uint32_t>::iterator it = std::unique(devices.begin(), devices.end());
255 if (it != devices.end())
256 ORIGINATE_ERROR(
"duplicated indexes");
261 for (uint32_t deviceIndex = 0; deviceIndex < deviceCount; ++deviceIndex)
263 devices.push_back(deviceIndex);
268 for (std::vector<uint32_t>::iterator it = devices.begin(); it != devices.end(); ++it)
270 UniquePointer<Session> session(
new Session);
273 ORIGINATE_ERROR(
"Out of memory");
275 PROPAGATE_ERROR(session->initialize(*it));
285 PROPAGATE_ERROR(session->
start());
301 PROPAGATE_ERROR(session->
stop());
313 const bool isTrue =
static_cast<const Value<bool>&
>(source).
get();
320 PROPAGATE_ERROR(
stop());
326 PROPAGATE_ERROR(
start());
336 PROPAGATE_ERROR(
stop());
337 PROPAGATE_ERROR(
start());