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