40 namespace ArgusSamples
44 : m_initialized(false)
47 , m_prevRunning(false)
64 PROPAGATE_ERROR(dispatcher.
m_deviceOpen.registerObserver(
this,
68 PROPAGATE_ERROR(dispatcher.
m_outputSize.registerObserver(
this,
76 ORIGINATE_ERROR(
"Out of memory");
87 PROPAGATE_ERROR(
stop());
88 PROPAGATE_ERROR(
start());
95 const bool isOpen =
static_cast<const Value<bool>&
>(source).
get();
102 PROPAGATE_ERROR(
stop());
107 PROPAGATE_ERROR(
start());
115 const bool isTrue =
static_cast<const Value<bool>&
>(source).
get();
122 PROPAGATE_ERROR(
stop());
128 PROPAGATE_ERROR(
start());
137 ORIGINATE_ERROR(
"Not initialized");
147 PROPAGATE_ERROR(dispatcher.createRequest(
m_previewRequest, Argus::CAPTURE_INTENT_PREVIEW));
152 Argus::IEGLOutputStream *iEGLOutputStream =
154 if (!iEGLOutputStream)
155 ORIGINATE_ERROR(
"Failed to get IEGLOutputStream interface");
158 PROPAGATE_ERROR(composer.
bindStream(iEGLOutputStream->getEGLStream()));
160 const Argus::Size2D<uint32_t> streamSize = iEGLOutputStream->getResolution();
162 (float)streamSize.width() / (float)streamSize.height()));
163 PROPAGATE_ERROR(composer.
setStreamActive(iEGLOutputStream->getEGLStream(),
true));
180 ORIGINATE_ERROR(
"Not initialized");
190 PROPAGATE_ERROR(dispatcher.stopRepeat());
192 PROPAGATE_ERROR(dispatcher.waitForIdle());
198 Argus::IEGLOutputStream *iEGLOutputStream =
200 if (!iEGLOutputStream)
201 ORIGINATE_ERROR(
"Failed to get IEGLOutputStream interface");
204 iEGLOutputStream->disconnect();
225 ORIGINATE_ERROR(
"Not initialized");
227 ORIGINATE_ERROR(
"Not running");
232 PROPAGATE_ERROR(dispatcher.
createRequest(stillRequest, Argus::CAPTURE_INTENT_STILL_CAPTURE));
235 Argus::UniqueObj<Argus::OutputStream> stillStream;
242 Argus::UniqueObj<EGLStream::FrameConsumer> consumer(
243 EGLStream::FrameConsumer::create(stillStream.get()));
244 EGLStream::IFrameConsumer *iFrameConsumer =
245 Argus::interface_cast<EGLStream::IFrameConsumer>(consumer);
247 ORIGINATE_ERROR(
"Failed to create FrameConsumer");
250 PROPAGATE_ERROR(dispatcher.
capture(stillRequest.
get()));
253 Argus::UniqueObj<EGLStream::Frame> frame(iFrameConsumer->acquireFrame());
255 ORIGINATE_ERROR(
"Failed to aquire frame");
258 EGLStream::IFrame *iFrame = Argus::interface_cast<EGLStream::IFrame>(frame);
260 ORIGINATE_ERROR(
"Failed to get IFrame interface.");
262 EGLStream::Image *image = iFrame->getImage();
264 ORIGINATE_ERROR(
"Failed to get image.");
271 EGLStream::IImageJPEG *iJPEG =
272 Argus::interface_cast<EGLStream::IImageJPEG>(image);
274 ORIGINATE_ERROR(
"Failed to get IImageJPEG interface.");
277 std::ostringstream fileName;
280 fileName <<
"/image" << std::setfill(
'0') << std::setw(4) <<
286 if (iJPEG->writeJPEG(fileName.str().c_str()) == Argus::STATUS_OK)
288 PROPAGATE_ERROR(dispatcher.
message(
"Captured a still image to '%s'\n",
289 fileName.str().c_str()));
293 ORIGINATE_ERROR(
"Failed to write JPEG to '%s'\n", fileName.str().c_str());
301 EGLStream::IImageHeaderlessFile *iHeaderlessFile =
302 Argus::interface_cast<EGLStream::IImageHeaderlessFile>(image);
303 if (!iHeaderlessFile)
304 ORIGINATE_ERROR(
"Failed to get IImageHeaderlessFile interface.");
306 EGLStream::IImage2D *i2D =
307 Argus::interface_cast<EGLStream::IImage2D>(image);
309 ORIGINATE_ERROR(
"Failed to get IImage2D interface.");
310 const Argus::Size2D<uint32_t> size = i2D->getSize();
313 std::ostringstream fileName;
317 fileName <<
"/image_" <<
318 size.width() <<
"x" << size.height() <<
"_" <<
326 if (iHeaderlessFile->writeHeaderlessFile(fileName.str().c_str()) == Argus::STATUS_OK)
328 PROPAGATE_ERROR(dispatcher.
message(
"Captured a still image to '%s'\n",
329 fileName.str().c_str()));
333 ORIGINATE_ERROR(
"Failed to write headerless raw image to '%s'\n",
334 fileName.str().c_str());
340 ORIGINATE_ERROR(
"unknown still image file type");
353 PROPAGATE_ERROR(stillRequest.
reset());
367 PROPAGATE_ERROR_CONTINUE(
stop());
374 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_outputSize.unregisterObserver(
this,
378 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_deviceOpen.unregisterObserver(
this,