xref: /aosp_15_r20/external/armnn/samples/common/include/CVUtils/CvVideoFileWriter.hpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1*89c4ff92SAndroid Build Coastguard Worker //
2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT
4*89c4ff92SAndroid Build Coastguard Worker //
5*89c4ff92SAndroid Build Coastguard Worker 
6*89c4ff92SAndroid Build Coastguard Worker #pragma once
7*89c4ff92SAndroid Build Coastguard Worker 
8*89c4ff92SAndroid Build Coastguard Worker #include "IFrameOutput.hpp"
9*89c4ff92SAndroid Build Coastguard Worker #include <opencv2/opencv.hpp>
10*89c4ff92SAndroid Build Coastguard Worker 
11*89c4ff92SAndroid Build Coastguard Worker namespace common
12*89c4ff92SAndroid Build Coastguard Worker {
13*89c4ff92SAndroid Build Coastguard Worker 
14*89c4ff92SAndroid Build Coastguard Worker class CvVideoFileWriter : public IFrameOutput<cv::Mat> {
15*89c4ff92SAndroid Build Coastguard Worker public:
16*89c4ff92SAndroid Build Coastguard Worker     /**
17*89c4ff92SAndroid Build Coastguard Worker      * @brief Default constructor.
18*89c4ff92SAndroid Build Coastguard Worker      *
19*89c4ff92SAndroid Build Coastguard Worker      * Underlying open cv video writer object will be instantiated.
20*89c4ff92SAndroid Build Coastguard Worker      */
21*89c4ff92SAndroid Build Coastguard Worker     CvVideoFileWriter() = default;
22*89c4ff92SAndroid Build Coastguard Worker 
23*89c4ff92SAndroid Build Coastguard Worker     ~CvVideoFileWriter() override = default;
24*89c4ff92SAndroid Build Coastguard Worker 
25*89c4ff92SAndroid Build Coastguard Worker     /**
26*89c4ff92SAndroid Build Coastguard Worker      * @brief Initialises video file writer.
27*89c4ff92SAndroid Build Coastguard Worker      *
28*89c4ff92SAndroid Build Coastguard Worker      * Opens opencv writer with given params. FFMPEG backend is used.
29*89c4ff92SAndroid Build Coastguard Worker      *
30*89c4ff92SAndroid Build Coastguard Worker      * @param outputVideo path to the video file.
31*89c4ff92SAndroid Build Coastguard Worker      * @param encoding cv::CAP_PROP_FOURCC code.
32*89c4ff92SAndroid Build Coastguard Worker      * @param fps target frame rate.
33*89c4ff92SAndroid Build Coastguard Worker      * @param width target frame width.
34*89c4ff92SAndroid Build Coastguard Worker      * @param height target frame height.
35*89c4ff92SAndroid Build Coastguard Worker      *
36*89c4ff92SAndroid Build Coastguard Worker      */
37*89c4ff92SAndroid Build Coastguard Worker     void Init(const std::string& outputVideo, int encoding, double fps, int width, int height);
38*89c4ff92SAndroid Build Coastguard Worker 
39*89c4ff92SAndroid Build Coastguard Worker     /**
40*89c4ff92SAndroid Build Coastguard Worker      * Writes frame to the file using opencv writer.
41*89c4ff92SAndroid Build Coastguard Worker      *
42*89c4ff92SAndroid Build Coastguard Worker      * @param frame data to write.
43*89c4ff92SAndroid Build Coastguard Worker      */
44*89c4ff92SAndroid Build Coastguard Worker     void WriteFrame(std::shared_ptr<cv::Mat>& frame) override;
45*89c4ff92SAndroid Build Coastguard Worker 
46*89c4ff92SAndroid Build Coastguard Worker     /**
47*89c4ff92SAndroid Build Coastguard Worker      * Releases opencv writer.
48*89c4ff92SAndroid Build Coastguard Worker      */
49*89c4ff92SAndroid Build Coastguard Worker     void Close() override;
50*89c4ff92SAndroid Build Coastguard Worker 
51*89c4ff92SAndroid Build Coastguard Worker     /**
52*89c4ff92SAndroid Build Coastguard Worker      * Checks if opencv writer was successfully opened.
53*89c4ff92SAndroid Build Coastguard Worker      * @return true is underlying writer is ready to be used, false otherwise.
54*89c4ff92SAndroid Build Coastguard Worker      */
55*89c4ff92SAndroid Build Coastguard Worker     bool IsReady() const override;
56*89c4ff92SAndroid Build Coastguard Worker 
57*89c4ff92SAndroid Build Coastguard Worker private:
58*89c4ff92SAndroid Build Coastguard Worker     cv::VideoWriter m_cvWriter{};
59*89c4ff92SAndroid Build Coastguard Worker     bool m_ready = false;
60*89c4ff92SAndroid Build Coastguard Worker };
61*89c4ff92SAndroid Build Coastguard Worker }// namespace common