39 namespace ArgusSamples
43 : m_initialized(false)
71 const bool isOpen =
static_cast<const Value<bool>&
>(source).
get();
78 PROPAGATE_ERROR(
stop());
83 PROPAGATE_ERROR(
start());
92 ORIGINATE_ERROR(
"Not initialized");
105 Argus::IStream *iStream =
108 ORIGINATE_ERROR(
"Failed to get IStream interface");
111 PROPAGATE_ERROR(renderer.
bindStream(iStream->getEGLStream()));
113 const Argus::Size streamSize = iStream->getResolution();
115 (float)streamSize.width / (
float)streamSize.height));
116 PROPAGATE_ERROR(renderer.
setStreamActive(iStream->getEGLStream(),
true));
121 std::vector<Argus::EventType> eventTypes;
122 eventTypes.push_back(Argus::EVENT_TYPE_CAPTURE_COMPLETE);
124 Argus::UniqueObj<Argus::EventQueue> eventQueue;
131 ORIGINATE_ERROR(
"Failed to allocate EventThread");
149 ORIGINATE_ERROR(
"Not initialized");
165 Argus::interface_cast<Argus::IStream>(
m_previewStream)->getEGLStream(),
false));
172 const EGLStreamKHR eglStream =
173 Argus::interface_cast<Argus::IStream>(
m_previewStream)->getEGLStream();
193 ORIGINATE_ERROR(
"Not initialized");
195 ORIGINATE_ERROR(
"Not running");
199 Argus::UniqueObj<Argus::Request> stillRequest;
200 PROPAGATE_ERROR(dispatcher.
createRequest(stillRequest, Argus::CAPTURE_INTENT_STILL_CAPTURE));
203 Argus::UniqueObj<Argus::OutputStream> stillStream;
207 PROPAGATE_ERROR(dispatcher.
enableOutputStream(stillRequest.get(), stillStream.get()));
210 Argus::UniqueObj<EGLStream::FrameConsumer> consumer(
211 EGLStream::FrameConsumer::create(stillStream.get()));
212 EGLStream::IFrameConsumer *iFrameConsumer =
213 Argus::interface_cast<EGLStream::IFrameConsumer>(consumer);
215 ORIGINATE_ERROR(
"Failed to create FrameConsumer");
218 PROPAGATE_ERROR(dispatcher.
capture(stillRequest.get()));
221 Argus::UniqueObj<EGLStream::Frame> frame(iFrameConsumer->acquireFrame());
223 ORIGINATE_ERROR(
"Failed to aquire frame");
226 EGLStream::IFrame *iFrame = Argus::interface_cast<EGLStream::IFrame>(frame);
228 ORIGINATE_ERROR(
"Failed to get IFrame interface.");
230 EGLStream::Image *image = iFrame->getImage();
232 ORIGINATE_ERROR(
"Failed to get image.");
235 EGLStream::IImageJPEG *iJPEG =
236 Argus::interface_cast<EGLStream::IImageJPEG>(image);
238 ORIGINATE_ERROR(
"Failed to get IImageJPEG interface.");
241 std::ostringstream fileName;
244 fileName <<
"/image" << std::setfill(
'0') << std::setw(4) <<
m_captureIndex <<
".jpg";
247 if (iJPEG->writeJPEG(fileName.str().c_str()) == Argus::STATUS_OK)
249 PROPAGATE_ERROR(dispatcher.
message(
"Captured a still image to '%s'\n",
250 fileName.str().c_str()));
254 ORIGINATE_ERROR(
"Failed to write JPEG to '%s'\n", fileName.str().c_str());
281 PROPAGATE_ERROR(
stop());