summaryrefslogtreecommitdiff
path: root/src/cam
diff options
context:
space:
mode:
authorNiklas Söderlund <niklas.soderlund@ragnatech.se>2019-01-28 01:18:39 +0100
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-02-06 08:03:03 +0200
commit8b27416267a8c14cda97f6511c2f3e0c0d42caf3 (patch)
tree0e51f7d73bff73d82b78872c742d024f405157ef /src/cam
parent46ca8eeca06de7e0657d628325876e7f0a15ef0b (diff)
cam: Add option to write raw frames to disk
Use the helper BufferWriter to optionally write frames to disk as they are captured. Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'src/cam')
-rw-r--r--src/cam/main.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/cam/main.cpp b/src/cam/main.cpp
index ec5040e1..9b67ab75 100644
--- a/src/cam/main.cpp
+++ b/src/cam/main.cpp
@@ -13,6 +13,7 @@
#include <libcamera/libcamera.h>
+#include "buffer_writer.h"
#include "event_loop.h"
#include "options.h"
@@ -21,10 +22,12 @@ using namespace libcamera;
OptionsParser::Options options;
std::shared_ptr<Camera> camera;
EventLoop *loop;
+BufferWriter *writer;
enum {
OptCamera = 'c',
OptCapture = 'C',
+ OptFile = 'F',
OptFormat = 'f',
OptHelp = 'h',
OptList = 'l',
@@ -52,6 +55,11 @@ static int parseOptions(int argc, char *argv[])
ArgumentRequired, "camera");
parser.addOption(OptCapture, OptionNone,
"Capture until interrupted by user", "capture");
+ parser.addOption(OptFile, OptionString,
+ "Write captured frames to disk\n"
+ "The first '#' character in the file name is expanded to the frame sequence number.\n"
+ "The default file name is 'frame-#.bin'.",
+ "file", ArgumentOptional, "filename");
parser.addOption(OptFormat, &formatKeyValue,
"Set format of the camera's first stream", "format");
parser.addOption(OptHelp, OptionNone, "Display this help message",
@@ -113,6 +121,9 @@ static void requestComplete(Request *request, const std::map<Stream *, Buffer *>
<< " fps: " << std::fixed << std::setprecision(2) << fps
<< std::endl;
+ if (writer)
+ writer->write(buffer);
+
request = camera->createRequest();
if (!request) {
std::cerr << "Can't create request" << std::endl;
@@ -240,7 +251,19 @@ int main(int argc, char **argv)
goto out;
}
+ if (options.isSet(OptFile)) {
+ if (!options[OptFile].toString().empty())
+ writer = new BufferWriter(options[OptFile]);
+ else
+ writer = new BufferWriter();
+ }
+
capture();
+
+ if (options.isSet(OptFile)) {
+ delete writer;
+ writer = nullptr;
+ }
}
if (camera) {