|
#ifndef __MPP_ENCODER_H__ |
|
#define __MPP_ENCODER_H__ |
|
|
|
#include "rockchip/mpp_frame.h" |
|
#include "rockchip/rk_mpi.h" |
|
#include <pthread.h> |
|
#include <string.h> |
|
|
|
typedef void (*MppEncoderFrameCallback)(void* userdata, const char* data, int size); |
|
|
|
typedef struct |
|
{ |
|
RK_U32 width; |
|
RK_U32 height; |
|
RK_U32 hor_stride; |
|
RK_U32 ver_stride; |
|
MppFrameFormat fmt; |
|
MppCodingType type; |
|
|
|
RK_U32 osd_enable; |
|
RK_U32 osd_mode; |
|
RK_U32 split_mode; |
|
RK_U32 split_arg; |
|
RK_U32 split_out; |
|
|
|
RK_U32 user_data_enable; |
|
RK_U32 roi_enable; |
|
|
|
|
|
RK_S32 fps_in_flex; |
|
RK_S32 fps_in_den; |
|
RK_S32 fps_in_num; |
|
RK_S32 fps_out_flex; |
|
RK_S32 fps_out_den; |
|
RK_S32 fps_out_num; |
|
RK_S32 bps; |
|
RK_S32 bps_max; |
|
RK_S32 bps_min; |
|
RK_S32 rc_mode; |
|
RK_S32 gop_mode; |
|
RK_S32 gop_len; |
|
RK_S32 vi_len; |
|
|
|
|
|
RK_S32 qp_init; |
|
RK_S32 qp_max; |
|
RK_S32 qp_max_i; |
|
RK_S32 qp_min; |
|
RK_S32 qp_min_i; |
|
RK_S32 qp_max_step; |
|
RK_S32 qp_delta_ip; |
|
RK_S32 qp_delta_vi; |
|
|
|
RK_U32 constraint_set; |
|
RK_U32 rotation; |
|
RK_U32 mirroring; |
|
RK_U32 flip; |
|
|
|
MppEncHeaderMode header_mode; |
|
MppEncSeiMode sei_mode; |
|
} MppEncoderParams; |
|
|
|
class MppEncoder { |
|
public: |
|
MppEncoder(); |
|
~MppEncoder(); |
|
int Init(MppEncoderParams& params, void* userdata); |
|
int SetCallback(MppEncoderFrameCallback callback); |
|
int Encode(void* mpp_buf, char* enc_buf, int max_size); |
|
int GetHeader(char* enc_buf, int max_size); |
|
int Reset(); |
|
void* ImportBuffer(int index, size_t size, int fd, int type); |
|
size_t GetFrameSize(); |
|
void* GetInputFrameBuffer(); |
|
int GetInputFrameBufferFd(void* mpp_buffer); |
|
void* GetInputFrameBufferAddr(void* mpp_buffer); |
|
private: |
|
int InitParams(MppEncoderParams& params); |
|
int SetupEncCfg(); |
|
|
|
MppCtx mpp_ctx = NULL; |
|
MppApi* mpp_mpi = NULL; |
|
RK_S32 chn = 0; |
|
|
|
MppEncoderFrameCallback callback = NULL; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MppEncCfg cfg = NULL; |
|
MppEncPrepCfg prep_cfg; |
|
MppEncRcCfg rc_cfg; |
|
MppEncCodecCfg codec_cfg; |
|
MppEncSliceSplit split_cfg; |
|
MppEncOSDPltCfg osd_plt_cfg; |
|
MppEncOSDPlt osd_plt; |
|
MppEncOSDData osd_data; |
|
|
|
MppEncROICfg roi_cfg; |
|
|
|
|
|
MppBufferGroup buf_grp = NULL; |
|
MppBuffer frm_buf = NULL; |
|
MppBuffer pkt_buf = NULL; |
|
MppBuffer md_info = NULL; |
|
|
|
|
|
|
|
|
|
size_t header_size; |
|
size_t frame_size; |
|
size_t mdinfo_size; |
|
|
|
size_t packet_size; |
|
|
|
MppEncoderParams enc_params; |
|
|
|
void* userdata = NULL; |
|
}; |
|
|
|
#endif |
|
|