Files

140 lines
2.9 KiB
C++
Raw Permalink Normal View History

2026-08-13 11:28:40 +08:00
#include "AmlVencParamIntf.h"
#include "AmlVencParam.h"
namespace android {
constexpr static size_t kLinearBufferSize = 2 * 1024 * 1024;
#define SUPPORT_MIN_WIDTH 176
#define SUPPORT_MAX_WIDTH 1920
#define SUPPORT_MIN_HEIGHT 144
#define SUPPORT_MAX_HEIGHT 1080
#define SUPPORT_WIDTH_ALIGN 2
#define SUPPORT_HEIGHT_ALIGN 2
#define IS_SUPPORT_DMA 0
#define IS_SUPPORT_CANVAS 0
#define DEFAULT_MAX_INSTANCE 3
AmlVencParam::AmlVencParam()
:mNotifier(NULL),
mParam(NULL),
mCodecType(H264){
memset(&mVencParam,0,sizeof(mVencParam));
}
AmlVencParam::~AmlVencParam() {
}
bool AmlVencParam::RegisterChangeNotify(ParamChangeNotify Notifier,void *Param) {
if (NULL == Notifier) {
return false;
}
mNotifier = Notifier;
mParam = Param;
return true;
}
int AmlVencParam::GetMaxSupportInstance() {
return DEFAULT_MAX_INSTANCE;
}
bool AmlVencParam::GetBitrateLimit(int &pMin,int &pMax) {
pMin = 1;
pMax = 100000000;
return true;
}
bool AmlVencParam::GetSizeLimit(stPicSize &pMin,stPicSize &pMax,stPicAlign &align) {
pMin.width = SUPPORT_MIN_WIDTH;
pMin.height = SUPPORT_MIN_HEIGHT;
pMax.width = SUPPORT_MAX_WIDTH;
pMax.height = SUPPORT_MAX_HEIGHT;
align.width = SUPPORT_WIDTH_ALIGN;
align.height = SUPPORT_HEIGHT_ALIGN;
return true;
}
int AmlVencParam::GetMaxOutputBufferSize() {
return kLinearBufferSize;
}
bool AmlVencParam::GetIsSupportDMAMode() {
return IS_SUPPORT_DMA;
}
bool AmlVencParam::GetIsSupportCanvasMode() {
return IS_SUPPORT_CANVAS;
}
bool AmlVencParam::GetGopLimit(int &pMin,int &pMax) {
pMin = 0;
pMax = 0xffffffff;
return true;
}
bool AmlVencParam::GetQpLimit(int &Min,int &Max) {
Min = 0;
Max = 51;
return true;
}
bool AmlVencParam::GetDefaultProfileLevel(C2Config::profile_t &profile,C2Config::level_t &level) {
if (H264 == mCodecType) {
profile = PROFILE_AVC_MAIN;
level = LEVEL_AVC_4_1;
}
else if(H265 == mCodecType) {
profile = PROFILE_HEVC_MAIN;
level = LEVEL_HEVC_HIGH_5_1;
}
else {
return false;
}
return true;
}
//default not support svc function
bool AmlVencParam::GetSVCLimit(stSVCInfo &SvcInfo) {
memset(&SvcInfo,0,sizeof(SvcInfo));
return true;
}
bool AmlVencParam::UpdateAvgQp(int AvgQp) {
return mNotifier(mParam,E_AVRAGE_QP,&AvgQp);
}
bool AmlVencParam::UpdateFrameType(ePicType FrameType) {
return mNotifier(mParam,E_FRAME_TYPE,&FrameType);
}
bool AmlVencParam::UpdateSyncFrameReq(int Request) {
mVencParam.SyncFrameRequest = Request;
return mNotifier(mParam,E_SYNCFRAME_REQUEST,&Request);
}
bool AmlVencParam::UpdatePicSize(int Width,int Height) {
stPicSize PicSize;
mVencParam.Width = Width;
mVencParam.Height = Height;
PicSize.width = Width;
PicSize.height = Height;
return mNotifier(mParam,E_PIC_SIZE,&PicSize);
}
}