gf_ai_box/include/fake/vmf/video_encoder.h
2026-04-12 17:47:54 +08:00

91 lines
2.7 KiB
C

#ifndef VMF_VIDEO_ENCODER_H
#define VMF_VIDEO_ENCODER_H
#include <stdint.h>
#include <vmf/video_bind.h>
typedef struct VMF_VENC_HANDLE_S VMF_VENC_HANDLE_T;
typedef enum {
VMF_VENC_CODEC_TYPE_H264 = 0,
VMF_VENC_CODEC_TYPE_H265 = 1,
VMF_VENC_CODEC_TYPE_MJPG = 2,
} VMF_VENC_CODEC_TYPE;
typedef enum {
VMF_H4E_PROFILE_HIGH = 0,
VMF_H4E_PROFILE_MAIN = 1,
VMF_H4E_PROFILE_BASE = 2,
} VMF_H4E_PROFILE_E;
typedef enum {
VMF_ADMODE_MEET_FPS = 0,
VMF_ADMODE_CBR = 1,
} VMF_ADMODE_E;
/* H.264 encoder config — positional init: dwQp,dwBitrate,dbFps,dwGop,eProfile,iSQS,eAdMode,dwMinQp,dwMaxQp,dwMinFps,dwVirtI,dwPIQ */
typedef struct {
uint32_t dwQp;
uint32_t dwBitrate;
double dbFps;
uint32_t dwGop;
VMF_H4E_PROFILE_E eProfile;
int32_t iSliceQualityStrategy;
VMF_ADMODE_E eAdMode;
uint32_t dwMinQp;
uint32_t dwMaxQp;
uint32_t dwMinFps;
uint32_t dwVirtIFrameInterval;
uint32_t dwPIQ;
} VMF_H4E_CONFIG_T;
/* H.265 encoder config — positional init: dwQp,dwBitrate,dwFps,dwGop,iSQS,dwMinQp,dwMaxQp,dwVirtI,dwPIQ,eAdMode,dwComplexMapCtrl */
typedef struct {
uint32_t dwQp;
uint32_t dwBitrate;
uint32_t dwFps;
uint32_t dwGop;
int32_t iSliceQualityStrategy;
uint32_t dwMinQp;
uint32_t dwMaxQp;
uint32_t dwVirtIFrameInterval;
uint32_t dwPIQ;
VMF_ADMODE_E eAdMode;
uint32_t dwComplexMapCtrl;
} VMF_H5E_CONFIG_T;
/* MJPEG encoder config — positional init: dwQp,bEnableThumbnail,dwThumbnailQp,bJfifHdr,dwBitrate,dwFps */
typedef struct {
uint32_t dwQp;
uint32_t bEnableThumbnail;
uint32_t dwThumbnailQp;
uint32_t bJfifHdr;
uint32_t dwBitrate;
uint32_t dwFps;
} VMF_JE_CONFIG_T;
/* Video encoder config */
typedef struct {
uint32_t dwEncWidth;
uint32_t dwEncHeight;
uint32_t dwFps;
uint32_t bConnectIfp;
VMF_VENC_CODEC_TYPE eCodecType;
void *pCodecConfig;
void *pBind;
VMF_SRC_CONNECT_FUNC fnSrcConnectFunc;
uint32_t bKeepRatio;
uint32_t _pad[8];
} VMF_VENC_CONFIG_T;
VMF_VENC_HANDLE_T *VMF_VENC_Init(VMF_VENC_CONFIG_T *cfg);
void VMF_VENC_Release(VMF_VENC_HANDLE_T *h);
void VMF_VENC_ProduceStreamHdr(VMF_VENC_HANDLE_T *h);
int VMF_VENC_Start(VMF_VENC_HANDLE_T *h);
int VMF_VENC_Stop(VMF_VENC_HANDLE_T *h);
int VMF_VENC_SetIntra(VMF_VENC_HANDLE_T *h);
int VMF_VENC_Suspend(VMF_VENC_HANDLE_T *h);
int VMF_VENC_Resume(VMF_VENC_HANDLE_T *h);
#endif /* VMF_VIDEO_ENCODER_H */