Logo
ApraPipes 1.0
Loading...
Searching...
No Matches
H264EncoderV4L2Helper.h
1#pragma once
2#include <boost/pool/object_pool.hpp>
3
4#include "ExtFrame.h"
5#include "AV4L2ElementPlane.h"
6#include "V4L2CUYUV420Converter.h"
7#include <v4l2_nv_extensions.h>
8
10{
11public:
12 typedef std::function<void(frame_container& errorFrame)> SendFrameContainer;
13 static std::shared_ptr<H264EncoderV4L2Helper> create(enum v4l2_memory memType, uint32_t pixelFormat, uint32_t width, uint32_t height, uint32_t step, uint32_t bitrate, bool enableMotionVectors, int motionVectorThreshold, uint32_t fps, std::string h264FrameOutputPinId, std::string motionVectorFramePinId, framemetadata_sp h264Metadata, std::function<frame_sp(size_t size, string& pinId)> makeFrame, SendFrameContainer sendFrameContainer);
14
15 H264EncoderV4L2Helper(enum v4l2_memory memType, uint32_t pixelFormat, uint32_t width, uint32_t height, uint32_t step, uint32_t bitrate, bool enableMotionVectors, int motionVectorThreshold, uint32_t fps,std::string h264FrameOutputPinId, std::string motionVectorFramePinId, framemetadata_sp h264Metadata, std::function<frame_sp(size_t size, string& pinId)> makeFrame, SendFrameContainer sendFrameContainer);
17
18 void stop();
19
20 // data is cuda rgb data pointer and should be already synced
21 bool process(frame_sp& frame);
22
23private:
24 void setSelf(std::shared_ptr<H264EncoderV4L2Helper> &mother);
25
26 void initV4L2();
27 void termV4L2();
28
29 void setBitrate(uint32_t bitrate);
30 void setProfile();
31 void setLevel();
32 void setFrameRate(uint32_t framerate_num, uint32_t framerate_den);
33
34 int setExtControlsMV(v4l2_ext_controls &ctl);
36 void initEncoderParams(uint32_t bitrate, uint32_t fps);
37 int setExtControls(v4l2_ext_control &control);
38
40 void reuseCatureBuffer(ExtFrame *pointer, uint32_t index, std::shared_ptr<H264EncoderV4L2Helper> self);
41
42 bool processEOS();
43 int getExtControls(v4l2_ext_controls &ctl);
44 int getMotionVectors(uint32_t buffer_index,
45 v4l2_ctrl_videoenc_outputbuf_metadata_MV &enc_mv_metadata);
46 void serializeMotionVectors(v4l2_ctrl_videoenc_outputbuf_metadata_MV enc_mv_metadata, frame_container &frames);
47private:
48 std::shared_ptr<H264EncoderV4L2Helper> mSelf;
49 int mFD;
50 std::unique_ptr<AV4L2ElementPlane> mOutputPlane;
51 std::unique_ptr<AV4L2ElementPlane> mCapturePlane;
52 boost::object_pool<ExtFrame> frame_opool;
54 int mWidth = 0;
55 int mHeight = 0;
60 framemetadata_sp h264Metadata;
61 std::function<frame_sp(size_t size, string& pinId)> makeFrame;
62 std::unique_ptr<V4L2CUYUV420Converter> mConverter;
63protected:
64 std::queue <uint64_t> incomingTimeStamp;
65};
Definition AV4L2Buffer.h:17
Definition ExtFrame.h:6
Definition H264EncoderV4L2Helper.h:10
void stop()
Definition H264EncoderV4L2Helper.cpp:93
int mFD
Definition H264EncoderV4L2Helper.h:49
void capturePlaneDQCallback(AV4L2Buffer *buffer)
Definition H264EncoderV4L2Helper.cpp:315
int getMotionVectors(uint32_t buffer_index, v4l2_ctrl_videoenc_outputbuf_metadata_MV &enc_mv_metadata)
Definition H264EncoderV4L2Helper.cpp:251
framemetadata_sp h264Metadata
Definition H264EncoderV4L2Helper.h:60
std::unique_ptr< AV4L2ElementPlane > mCapturePlane
Definition H264EncoderV4L2Helper.h:51
void initEncoderParams(uint32_t bitrate, uint32_t fps)
Definition H264EncoderV4L2Helper.cpp:160
int getExtControls(v4l2_ext_controls &ctl)
Definition H264EncoderV4L2Helper.cpp:241
int motionVectorThreshold
Definition H264EncoderV4L2Helper.h:57
int mHeight
Definition H264EncoderV4L2Helper.h:55
std::string h264FrameOutputPinId
Definition H264EncoderV4L2Helper.h:58
void setBitrate(uint32_t bitrate)
Definition H264EncoderV4L2Helper.cpp:172
std::function< frame_sp(size_t size, string &pinId)> makeFrame
Definition H264EncoderV4L2Helper.h:61
void initV4L2()
Definition H264EncoderV4L2Helper.cpp:107
std::unique_ptr< AV4L2ElementPlane > mOutputPlane
Definition H264EncoderV4L2Helper.h:50
int setExtControlsMV(v4l2_ext_controls &ctl)
Definition H264EncoderV4L2Helper.cpp:130
bool processEOS()
Definition H264EncoderV4L2Helper.cpp:357
std::queue< uint64_t > incomingTimeStamp
Definition H264EncoderV4L2Helper.h:64
std::string motionVectorFramePinId
Definition H264EncoderV4L2Helper.h:59
void setSelf(std::shared_ptr< H264EncoderV4L2Helper > &mother)
Definition H264EncoderV4L2Helper.cpp:35
int mWidth
Definition H264EncoderV4L2Helper.h:54
static std::shared_ptr< H264EncoderV4L2Helper > create(enum v4l2_memory memType, uint32_t pixelFormat, uint32_t width, uint32_t height, uint32_t step, uint32_t bitrate, bool enableMotionVectors, int motionVectorThreshold, uint32_t fps, std::string h264FrameOutputPinId, std::string motionVectorFramePinId, framemetadata_sp h264Metadata, std::function< frame_sp(size_t size, string &pinId)> makeFrame, SendFrameContainer sendFrameContainer)
Definition H264EncoderV4L2Helper.cpp:27
std::function< void(frame_container &errorFrame)> SendFrameContainer
Definition H264EncoderV4L2Helper.h:12
void setLevel()
Definition H264EncoderV4L2Helper.cpp:201
boost::object_pool< ExtFrame > frame_opool
Definition H264EncoderV4L2Helper.h:52
void serializeMotionVectors(v4l2_ctrl_videoenc_outputbuf_metadata_MV enc_mv_metadata, frame_container &frames)
Definition H264EncoderV4L2Helper.cpp:273
~H264EncoderV4L2Helper()
Definition H264EncoderV4L2Helper.cpp:81
int enableMotionVectorReporting()
Definition H264EncoderV4L2Helper.cpp:141
std::shared_ptr< H264EncoderV4L2Helper > mSelf
Definition H264EncoderV4L2Helper.h:48
void setFrameRate(uint32_t framerate_num, uint32_t framerate_den)
Definition H264EncoderV4L2Helper.cpp:212
void termV4L2()
Definition H264EncoderV4L2Helper.cpp:98
H264EncoderV4L2Helper(enum v4l2_memory memType, uint32_t pixelFormat, uint32_t width, uint32_t height, uint32_t step, uint32_t bitrate, bool enableMotionVectors, int motionVectorThreshold, uint32_t fps, std::string h264FrameOutputPinId, std::string motionVectorFramePinId, framemetadata_sp h264Metadata, std::function< frame_sp(size_t size, string &pinId)> makeFrame, SendFrameContainer sendFrameContainer)
Definition H264EncoderV4L2Helper.cpp:40
SendFrameContainer mSendFrameContainer
Definition H264EncoderV4L2Helper.h:53
bool process(frame_sp &frame)
Definition H264EncoderV4L2Helper.cpp:342
bool enableMotionVectors
Definition H264EncoderV4L2Helper.h:56
int setExtControls(v4l2_ext_control &control)
Definition H264EncoderV4L2Helper.cpp:228
void reuseCatureBuffer(ExtFrame *pointer, uint32_t index, std::shared_ptr< H264EncoderV4L2Helper > self)
Definition H264EncoderV4L2Helper.cpp:335
std::unique_ptr< V4L2CUYUV420Converter > mConverter
Definition H264EncoderV4L2Helper.h:62
void setProfile()
Definition H264EncoderV4L2Helper.cpp:183