40 namespace ArgusSamples
44 : m_initialized(false)
63 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_deviceOpen.registerObserver(
this,
67 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_outputSize.registerObserver(
this,
72 ORIGINATE_ERROR(
"Out of memory");
83 PROPAGATE_ERROR(
stop());
84 PROPAGATE_ERROR(
start());
91 const bool isOpen =
static_cast<const Value<bool>&
>(source).
get();
98 PROPAGATE_ERROR(
stop());
103 PROPAGATE_ERROR(
start());
112 ORIGINATE_ERROR(
"Not initialized");
122 PROPAGATE_ERROR(dispatcher.createRequest(
m_previewRequest, Argus::CAPTURE_INTENT_PREVIEW));
127 Argus::IStream *iStream = Argus::interface_cast<Argus::IStream>(
m_previewStream);
129 ORIGINATE_ERROR(
"Failed to get IStream interface");
132 PROPAGATE_ERROR(composer.
bindStream(iStream->getEGLStream()));
134 const Argus::Size2D<uint32_t> streamSize = iStream->getResolution();
136 (float)streamSize.width() / (float)streamSize.height()));
137 PROPAGATE_ERROR(composer.
setStreamActive(iStream->getEGLStream(),
true));
154 ORIGINATE_ERROR(
"Not initialized");
164 PROPAGATE_ERROR(dispatcher.stopRepeat());
166 PROPAGATE_ERROR(dispatcher.waitForIdle());
172 Argus::IStream *iStream = Argus::interface_cast<Argus::IStream>(
m_previewStream);
174 ORIGINATE_ERROR(
"Failed to get IStream interface");
177 iStream->disconnect();
198 ORIGINATE_ERROR(
"Not initialized");
200 ORIGINATE_ERROR(
"Not running");
205 PROPAGATE_ERROR(dispatcher.
createRequest(stillRequest, Argus::CAPTURE_INTENT_STILL_CAPTURE));
208 Argus::UniqueObj<Argus::OutputStream> stillStream;
215 Argus::UniqueObj<EGLStream::FrameConsumer> consumer(
216 EGLStream::FrameConsumer::create(stillStream.get()));
217 EGLStream::IFrameConsumer *iFrameConsumer =
218 Argus::interface_cast<EGLStream::IFrameConsumer>(consumer);
220 ORIGINATE_ERROR(
"Failed to create FrameConsumer");
223 PROPAGATE_ERROR(dispatcher.
capture(stillRequest.
get()));
226 Argus::UniqueObj<EGLStream::Frame> frame(iFrameConsumer->acquireFrame());
228 ORIGINATE_ERROR(
"Failed to aquire frame");
231 EGLStream::IFrame *iFrame = Argus::interface_cast<EGLStream::IFrame>(frame);
233 ORIGINATE_ERROR(
"Failed to get IFrame interface.");
235 EGLStream::Image *image = iFrame->getImage();
237 ORIGINATE_ERROR(
"Failed to get image.");
240 EGLStream::IImageJPEG *iJPEG =
241 Argus::interface_cast<EGLStream::IImageJPEG>(image);
243 ORIGINATE_ERROR(
"Failed to get IImageJPEG interface.");
246 std::ostringstream fileName;
249 fileName <<
"/image" << std::setfill(
'0') << std::setw(4) <<
m_captureIndex <<
".jpg";
252 if (iJPEG->writeJPEG(fileName.str().c_str()) == Argus::STATUS_OK)
254 PROPAGATE_ERROR(dispatcher.
message(
"Captured a still image to '%s'\n",
255 fileName.str().c_str()));
259 ORIGINATE_ERROR(
"Failed to write JPEG to '%s'\n", fileName.str().c_str());
272 PROPAGATE_ERROR(stillRequest.
reset());
286 PROPAGATE_ERROR_CONTINUE(
stop());
293 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_outputSize.unregisterObserver(
this,
297 PROPAGATE_ERROR_CONTINUE(dispatcher.
m_deviceOpen.unregisterObserver(
this,