diff options
author | Niklas Söderlund <niklas.soderlund@ragnatech.se> | 2019-01-28 01:18:39 +0100 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2019-02-06 08:03:03 +0200 |
commit | 8b27416267a8c14cda97f6511c2f3e0c0d42caf3 (patch) | |
tree | 0e51f7d73bff73d82b78872c742d024f405157ef | |
parent | 46ca8eeca06de7e0657d628325876e7f0a15ef0b (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>
-rw-r--r-- | src/cam/main.cpp | 23 |
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) { |