123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- // This file is part of OpenCV project.
- // It is subject to the license terms in the LICENSE file found in the top-level directory
- // of this distribution and at http://opencv.org/license.html.
- //
- // Copyright (C) 2021 Intel Corporation
- #ifndef OPENCV_GAPI_OAK_HPP
- #define OPENCV_GAPI_OAK_HPP
- #include <opencv2/gapi/garg.hpp> // IStreamSource
- #include <opencv2/gapi/gkernel.hpp> // GKernelPackage
- #include <opencv2/gapi/gstreaming.hpp> // GOptRunArgsP
- namespace cv {
- namespace gapi {
- namespace oak {
- // FIXME: copypasted from dai library
- struct EncoderConfig {
- /**
- * Rate control mode specifies if constant or variable bitrate should be used (H264 / H265)
- */
- enum class RateControlMode: int { CBR, VBR };
- /**
- * Encoding profile, H264, H265 or MJPEG
- */
- enum class Profile: int { H264_BASELINE, H264_HIGH, H264_MAIN, H265_MAIN, MJPEG };
- /**
- * Specifies preferred bitrate (kb) of compressed output bitstream
- */
- std::int32_t bitrate = 8000;
- /**
- * Every x number of frames a keyframe will be inserted
- */
- std::int32_t keyframeFrequency = 30;
- /**
- * Specifies maximum bitrate (kb) of compressed output bitstream
- */
- std::int32_t maxBitrate = 8000;
- /**
- * Specifies number of B frames to be inserted
- */
- std::int32_t numBFrames = 0;
- /**
- * This options specifies how many frames are available in this nodes pool (can help if
- * receiver node is slow at consuming
- */
- std::uint32_t numFramesPool = 4;
- /**
- * Encoding profile, H264, H265 or MJPEG
- */
- Profile profile = Profile::H265_MAIN;
- /**
- * Value between 0-100% (approximates quality)
- */
- std::int32_t quality = 80;
- /**
- * Lossless mode ([M]JPEG only)
- */
- bool lossless = false;
- /**
- * Rate control mode specifies if constant or variable bitrate should be used (H264 / H265)
- */
- RateControlMode rateCtrlMode = RateControlMode::CBR;
- /**
- * Input and compressed output frame width
- */
- std::int32_t width = 1920;
- /**
- * Input and compressed output frame height
- */
- std::int32_t height = 1080;
- /**
- * Frame rate
- */
- float frameRate = 30.0f;
- };
- G_API_OP(GEncFrame, <GArray<uint8_t>(GFrame, EncoderConfig)>, "org.opencv.oak.enc_frame") {
- static GArrayDesc outMeta(const GFrameDesc&, const EncoderConfig&) {
- return cv::empty_array_desc();
- }
- };
- G_API_OP(GSobelXY, <GFrame(GFrame, const cv::Mat&, const cv::Mat&)>, "org.opencv.oak.sobelxy") {
- static GFrameDesc outMeta(const GFrameDesc& in, const cv::Mat&, const cv::Mat&) {
- return in;
- }
- };
- G_API_OP(GCopy, <GFrame(GFrame)>, "org.opencv.oak.copy") {
- static GFrameDesc outMeta(const GFrameDesc& in) {
- return in;
- }
- };
- // FIXME: add documentation on operations below
- GAPI_EXPORTS GArray<uint8_t> encode(const GFrame& in, const EncoderConfig&);
- GAPI_EXPORTS GFrame sobelXY(const GFrame& in,
- const cv::Mat& hk,
- const cv::Mat& vk);
- GAPI_EXPORTS GFrame copy(const GFrame& in);
- // OAK backend & kernels ////////////////////////////////////////////////////////
- GAPI_EXPORTS cv::gapi::GBackend backend();
- GAPI_EXPORTS cv::gapi::GKernelPackage kernels();
- // Camera object ///////////////////////////////////////////////////////////////
- struct GAPI_EXPORTS ColorCameraParams {
- /**
- * Format of the frame one gets from the camera
- */
- bool interleaved = false;
- // FIXME: extend
- enum class BoardSocket: int { RGB, BGR };
- BoardSocket board_socket = BoardSocket::RGB;
- // FIXME: extend
- enum class Resolution: int { THE_1080_P };
- Resolution resolution = Resolution::THE_1080_P;
- };
- class GAPI_EXPORTS ColorCamera: public cv::gapi::wip::IStreamSource {
- cv::MediaFrame m_dummy;
- ColorCameraParams m_params;
- virtual bool pull(cv::gapi::wip::Data &data) override;
- virtual GMetaArg descr_of() const override;
- public:
- ColorCamera();
- explicit ColorCamera(const ColorCameraParams& params);
- };
- } // namespace oak
- } // namespace gapi
- namespace detail {
- template<> struct CompileArgTag<gapi::oak::ColorCameraParams> {
- static const char* tag() { return "gapi.oak.colorCameraParams"; }
- };
- template<> struct CompileArgTag<gapi::oak::EncoderConfig> {
- static const char* tag() { return "gapi.oak.encoderConfig"; }
- };
- } // namespace detail
- } // namespace cv
- #endif // OPENCV_GAPI_OAK_HPP
|