123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472 |
- namespace cv { namespace cudacodec {
- using namespace cuda;
- enum SurfaceFormat
- {
- SF_UYVY = 0,
- SF_YUY2,
- SF_YV12,
- SF_NV12,
- SF_IYUV,
- SF_BGR,
- SF_GRAY = SF_BGR
- };
- struct CV_EXPORTS_W EncoderParams
- {
- int P_Interval;
- int IDR_Period;
- int DynamicGOP;
- int RCType;
- int AvgBitrate;
- int PeakBitrate;
- int QP_Level_Intra;
- int QP_Level_InterP;
- int QP_Level_InterB;
- int DeblockMode;
- int ProfileLevel;
- int ForceIntra;
- int ForceIDR;
- int ClearStat;
- int DIMode;
- int Presets;
- int DisableCabac;
- int NaluFramingType;
- int DisableSPSPPS;
- EncoderParams();
-
- explicit EncoderParams(const String& configFile);
-
- void load(const String& configFile);
-
- void save(const String& configFile) const;
- };
- class CV_EXPORTS_W EncoderCallBack
- {
- public:
- enum PicType
- {
- IFRAME = 1,
- PFRAME = 2,
- BFRAME = 3
- };
- virtual ~EncoderCallBack() {}
-
- virtual uchar* acquireBitStream(int* bufferSize) = 0;
-
- virtual void releaseBitStream(unsigned char* data, int size) = 0;
-
- CV_WRAP virtual void onBeginFrame(int frameNumber, EncoderCallBack::PicType picType) = 0;
-
- CV_WRAP virtual void onEndFrame(int frameNumber, EncoderCallBack::PicType picType) = 0;
- };
- class CV_EXPORTS_W VideoWriter
- {
- public:
- virtual ~VideoWriter() {}
-
- CV_WRAP virtual void write(InputArray frame, bool lastFrame = false) = 0;
- CV_WRAP virtual EncoderParams getEncoderParams() const = 0;
- };
- CV_EXPORTS_W Ptr<cudacodec::VideoWriter> createVideoWriter(const String& fileName, Size frameSize, double fps, SurfaceFormat format = SF_BGR);
- CV_EXPORTS_W Ptr<cudacodec::VideoWriter> createVideoWriter(const String& fileName, Size frameSize, double fps, const EncoderParams& params, SurfaceFormat format = SF_BGR);
- CV_EXPORTS_W Ptr<cudacodec::VideoWriter> createVideoWriter(const Ptr<EncoderCallBack>& encoderCallback, Size frameSize, double fps, SurfaceFormat format = SF_BGR);
- CV_EXPORTS_W Ptr<cudacodec::VideoWriter> createVideoWriter(const Ptr<EncoderCallBack>& encoderCallback, Size frameSize, double fps, const EncoderParams& params, SurfaceFormat format = SF_BGR);
- enum Codec
- {
- MPEG1 = 0,
- MPEG2,
- MPEG4,
- VC1,
- H264,
- JPEG,
- H264_SVC,
- H264_MVC,
- HEVC,
- VP8,
- VP9,
- AV1,
- NumCodecs,
- Uncompressed_YUV420 = (('I'<<24)|('Y'<<16)|('U'<<8)|('V')),
- Uncompressed_YV12 = (('Y'<<24)|('V'<<16)|('1'<<8)|('2')),
- Uncompressed_NV12 = (('N'<<24)|('V'<<16)|('1'<<8)|('2')),
- Uncompressed_YUYV = (('Y'<<24)|('U'<<16)|('Y'<<8)|('V')),
- Uncompressed_UYVY = (('U'<<24)|('Y'<<16)|('V'<<8)|('Y'))
- };
- enum ChromaFormat
- {
- Monochrome = 0,
- YUV420,
- YUV422,
- YUV444,
- NumFormats
- };
- enum DeinterlaceMode
- {
- Weave = 0,
- Bob = 1,
- Adaptive = 2
- };
- struct FormatInfo
- {
- Codec codec;
- ChromaFormat chromaFormat;
- int nBitDepthMinus8 = -1;
- int ulWidth = 0;
- int ulHeight = 0;
- int width = 0;
- int height = 0;
- int ulMaxWidth = 0;
- int ulMaxHeight = 0;
- Rect displayArea;
- bool valid = false;
- double fps = 0;
- int ulNumDecodeSurfaces = 0;
- DeinterlaceMode deinterlaceMode;
- };
- enum class VideoReaderProps {
- PROP_DECODED_FRAME_IDX = 0,
- PROP_EXTRA_DATA_INDEX = 1,
- PROP_RAW_PACKAGES_BASE_INDEX = 2,
- PROP_NUMBER_OF_RAW_PACKAGES_SINCE_LAST_GRAB = 3,
- PROP_RAW_MODE = 4,
- PROP_LRF_HAS_KEY_FRAME = 5,
- PROP_NOT_SUPPORTED
- };
- class CV_EXPORTS_W VideoReader
- {
- public:
- virtual ~VideoReader() {}
-
- CV_WRAP virtual bool nextFrame(CV_OUT GpuMat& frame, Stream &stream = Stream::Null()) = 0;
-
- virtual FormatInfo format() const = 0;
-
- CV_WRAP virtual bool grab(Stream& stream = Stream::Null()) = 0;
-
- CV_WRAP virtual bool retrieve(CV_OUT OutputArray frame, const size_t idx = static_cast<size_t>(VideoReaderProps::PROP_DECODED_FRAME_IDX)) const = 0;
-
- CV_WRAP virtual bool set(const VideoReaderProps propertyId, const double propertyVal) = 0;
-
- CV_WRAP virtual bool get(const VideoReaderProps propertyId, CV_IN_OUT double& propertyVal) const = 0;
-
- CV_WRAP virtual bool get(const int propertyId, CV_OUT double& propertyVal) const = 0;
- };
- class CV_EXPORTS_W RawVideoSource
- {
- public:
- virtual ~RawVideoSource() {}
-
- virtual bool getNextPacket(unsigned char** data, size_t* size) = 0;
-
- virtual bool lastPacketContainsKeyFrame() const { return false; }
-
- virtual FormatInfo format() const = 0;
-
- virtual void updateFormat(const FormatInfo& videoFormat) = 0;
-
- virtual void getExtraData(cv::Mat& extraData) const = 0;
-
- virtual bool get(const int propertyId, double& propertyVal) const = 0;
- };
- CV_EXPORTS_W Ptr<VideoReader> createVideoReader(const String& filename, const std::vector<int>& params = {}, const bool rawMode = false);
- CV_EXPORTS_W Ptr<VideoReader> createVideoReader(const Ptr<RawVideoSource>& source, const bool rawMode = false);
- }}
|