40 namespace ArgusSamples
44 : m_initialized(false)
47 , m_prevRunning(false)
64 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_deviceOpen.registerObserver(
this,
68 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_outputSize.registerObserver(
this,
73 ORIGINATE_ERROR(
"Out of memory");
84 PROPAGATE_ERROR(
stop());
85 PROPAGATE_ERROR(
start());
92 const bool isOpen =
static_cast<const Value<bool>&
>(source).
get();
99 PROPAGATE_ERROR(
stop());
104 PROPAGATE_ERROR(
start());
112 const bool isTrue =
static_cast<const Value<bool>&
>(source).
get();
119 PROPAGATE_ERROR(
stop());
125 PROPAGATE_ERROR(
start());
134 ORIGINATE_ERROR(
"Not initialized");
144 PROPAGATE_ERROR(dispatcher.createRequest(
m_previewRequest, Argus::CAPTURE_INTENT_PREVIEW));
149 Argus::IStream *iStream = Argus::interface_cast<Argus::IStream>(
m_previewStream);
151 ORIGINATE_ERROR(
"Failed to get IStream interface");
154 PROPAGATE_ERROR(composer.
bindStream(iStream->getEGLStream()));
156 const Argus::Size2D<uint32_t> streamSize = iStream->getResolution();
158 (float)streamSize.width() / (float)streamSize.height()));
159 PROPAGATE_ERROR(composer.
setStreamActive(iStream->getEGLStream(),
true));
176 ORIGINATE_ERROR(
"Not initialized");
186 PROPAGATE_ERROR(dispatcher.stopRepeat());
188 PROPAGATE_ERROR(dispatcher.waitForIdle());
194 Argus::IStream *iStream = Argus::interface_cast<Argus::IStream>(
m_previewStream);
196 ORIGINATE_ERROR(
"Failed to get IStream interface");
199 iStream->disconnect();
220 ORIGINATE_ERROR(
"Not initialized");
222 ORIGINATE_ERROR(
"Not running");
227 PROPAGATE_ERROR(dispatcher.
createRequest(stillRequest, Argus::CAPTURE_INTENT_STILL_CAPTURE));
230 Argus::UniqueObj<Argus::OutputStream> stillStream;
237 Argus::UniqueObj<EGLStream::FrameConsumer> consumer(
238 EGLStream::FrameConsumer::create(stillStream.get()));
239 EGLStream::IFrameConsumer *iFrameConsumer =
240 Argus::interface_cast<EGLStream::IFrameConsumer>(consumer);
242 ORIGINATE_ERROR(
"Failed to create FrameConsumer");
245 PROPAGATE_ERROR(dispatcher.
capture(stillRequest.
get()));
248 Argus::UniqueObj<EGLStream::Frame> frame(iFrameConsumer->acquireFrame());
250 ORIGINATE_ERROR(
"Failed to aquire frame");
253 EGLStream::IFrame *iFrame = Argus::interface_cast<EGLStream::IFrame>(frame);
255 ORIGINATE_ERROR(
"Failed to get IFrame interface.");
257 EGLStream::Image *image = iFrame->getImage();
259 ORIGINATE_ERROR(
"Failed to get image.");
262 EGLStream::IImageJPEG *iJPEG =
263 Argus::interface_cast<EGLStream::IImageJPEG>(image);
265 ORIGINATE_ERROR(
"Failed to get IImageJPEG interface.");
268 std::ostringstream fileName;
271 fileName <<
"/image" << std::setfill(
'0') << std::setw(4) <<
m_captureIndex <<
".jpg";
274 if (iJPEG->writeJPEG(fileName.str().c_str()) == Argus::STATUS_OK)
276 PROPAGATE_ERROR(dispatcher.
message(
"Captured a still image to '%s'\n",
277 fileName.str().c_str()));
281 ORIGINATE_ERROR(
"Failed to write JPEG to '%s'\n", fileName.str().c_str());
294 PROPAGATE_ERROR(stillRequest.
reset());
308 PROPAGATE_ERROR_CONTINUE(
stop());
315 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_outputSize.unregisterObserver(
this,
319 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_deviceOpen.unregisterObserver(
this,