Conscience Core
CscCaptureFileRecorder.h
Go to the documentation of this file.
1 //
2 // CscCaptureFileRecorder.h
3 // ConscienceRobotManager
4 //
5 // Created by Louis Grignon on 1/12/2021.
6 // Copyright © 2021 IliesZaoui. All rights reserved.
7 //
8 
9 #ifndef CscCaptureFileRecorder_h
10 #define CscCaptureFileRecorder_h
11 
12 #include "CscCommon.h"
13 #include "./CscCaptureEngine.h"
14 #include <thread>
15 
16 using cv::VideoWriter, std::thread;
17 
19 
30 public:
34  CscCaptureFileRecorder(CscCaptureEngine *captureEngine, fs::path outputPath, const string &logPrefix);
36 
43  void setDurationSeconds(short durationSeconds);
44 
45  void start();
46 
53  optional<fs::path> tryGetRecording(const fs::path &snapshotOutputPath = fs::temp_directory_path() / ("recordingSnapshot_" + to_string(nowMillis()) + ".mp4"));
54 
58  void close();
59 
60  fs::path getOutputPath() const;
61 
62 private:
63  unsigned long long lastNotOpenedWarningLogTime;
64 
65  CscCaptureEngine *captureEngine;
66  optional<short> durationSeconds = {};
67  const fs::path outputPath;
68  const fs::path tempRecordingPath;
69  const fs::path tempLastRecordingPath;
70 
71  enum Status {
72  OPENING,
73  OPENED,
74  CLOSING,
75  CLOSED,
76  };
77  Status status = Status::CLOSED;
78 
79  int writtenFramesCounter = 0;
80 
81  mutex videoRecordingMutex;
82  mutex videoRecordingLastMutex;
83  mutex videoRecordingExtractMutex;
84  system_clock::time_point videoRecordingStartTime;
85 
86  thread *recorderThread = nullptr;
87  void recorderThreadAction();
88 
89  VideoWriter *videoWriterRecording = nullptr;
90 
91  VideoWriter *initVideoWriter(const fs::path &outputPath, const Resolution &resolution, const string &description);
92 
93  void ensureMp4VideoPath(const fs::path &videoPath);
94 
95  void ffmpeg(const string &command);
96 
97  fs::path getRecording(const fs::path &snapshotOutputPath = fs::temp_directory_path() / ("recordingSnapshot_" + to_string(nowMillis()) + ".mp4"));
98 
99  unique_ptr<CscLogger> logger = nullptr;
100 };
101 }
102 
103 #endif
conscience_core::media_capture::CscCaptureFileRecorder::getOutputPath
fs::path getOutputPath() const
Definition: CscCaptureFileRecorder.cpp:341
nlohmann::to_string
NLOHMANN_BASIC_JSON_TPL_DECLARATION std::string to_string(const NLOHMANN_BASIC_JSON_TPL &j)
user-defined to_string function for JSON values
Definition: json.hpp:26470
conscience_core::media_capture::CscCaptureFileRecorder
Definition: CscCaptureFileRecorder.h:29
conscience_core::media_capture::CscCaptureFileRecorder::~CscCaptureFileRecorder
~CscCaptureFileRecorder()
Definition: CscCaptureFileRecorder.cpp:37
conscience_utils::nowMillis
unsigned long long nowMillis()
Definition: conscience_util.cpp:294
conscience_core::media_capture::CscCaptureFileRecorder::close
void close()
Definition: CscCaptureFileRecorder.cpp:299
conscience_core::media_capture::CscCaptureFileRecorder::setDurationSeconds
void setDurationSeconds(short durationSeconds)
Definition: CscCaptureFileRecorder.cpp:41
conscience_core::media_capture::CscCaptureFileRecorder::CscCaptureFileRecorder
CscCaptureFileRecorder(CscCaptureEngine *captureEngine, fs::path outputPath, const string &logPrefix)
Definition: CscCaptureFileRecorder.cpp:25
CscCaptureEngine.h
conscience_core::media_capture::CscCaptureEngine
Definition: CscCaptureEngine.h:128
CscCommon.h
conscience_core::media_capture::Resolution
Definition: CscCaptureEngine.h:37
conscience_core::media_capture
Definition: CscEntityReflexion.h:53
conscience_core::media_capture::CscCaptureFileRecorder::start
void start()
Definition: CscCaptureFileRecorder.cpp:51
conscience_core::media_capture::CscCaptureFileRecorder::tryGetRecording
optional< fs::path > tryGetRecording(const fs::path &snapshotOutputPath=fs::temp_directory_path()/("recordingSnapshot_"+to_string(nowMillis())+".mp4"))
Definition: CscCaptureFileRecorder.cpp:190