/******************************************************************************
Copyright (C), 2017, Hisilicon Tech. Co., Ltd.
******************************************************************************
File Name : sample_venc.c
Version : Initial Draft
Author : Hisilicon multimedia software group
Created : 2017
Description :
******************************************************************************/
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif /* End of #ifdef __cplusplus */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
#include <signal.h>
#include "sample_comm.h"
#define XHL
//#define RTSP_ENABLE 0
#include "xhl_rtsp.h"
//#define SUPPORT_PRORES
/******************************************************************************
* function : show usage
******************************************************************************/
void SAMPLE_VENC_Usage(char* sPrgNm)
{
printf("Usage : %s [index] \n", sPrgNm);
printf("index:\n");
printf("\t 0) H.265e@4K@120fps + H264e@1080p@30fps.\n");
printf("\t 1) H.265e@4K@60fps + H264e@4K@60fp.\n");
printf("\t 2) Lowdelay:H.265e@4K@30fps.\n");
printf("\t 3) IntraRefresh:H.265e@4K@60fps + H264e@4K@60fps.\n");
printf("\t 4) Qpmap:H.265e@4K + H264e@4K@60fps.\n");
printf("\t 5) Mjpeg@4K@60fps +Jpeg@4K.\n");
return;
}
/******************************************************************************
* function : to process abnormal case
******************************************************************************/
void SAMPLE_VENC_HandleSig(HI_S32 signo)
{
if (SIGINT == signo || SIGTERM == signo)
{
SAMPLE_COMM_VENC_StopGetStream();
SAMPLE_COMM_VENC_StopSendQpmapFrame();
SAMPLE_COMM_All_ISP_Stop();
SAMPLE_COMM_SYS_Exit();
printf("\033[0;31mprogram termination abnormally!\033[0;39m\n");
}
exit(-1);
}
/******************************************************************************
* function : to process abnormal case - the case of stream venc
******************************************************************************/
void SAMPLE_VENC_StreamHandleSig(HI_S32 signo)
{
if (SIGINT == signo || SIGTERM == signo)
{
SAMPLE_COMM_SYS_Exit();
printf("\033[0;31mprogram exit abnormally!\033[0;39m\n");
}
exit(0);
}
VENC_GOP_MODE_E SAMPLE_VENC_GetGopMode(void)
{
char c;
VENC_GOP_MODE_E enGopMode = 0;
/*
Begin_Get:
printf("please input choose gop mode!\n");
printf("\t 0) NORMALP.\n");
printf("\t 1) DUALP.\n");
printf("\t 2) SMARTP.\n");
printf("\t 3) ADVSMARTP\n");
printf("\t 4) BIPREDB\n");
while((c = getchar()) != '\n' && c != EOF)
switch(c)
{
case '0':
enGopMode = VENC_GOPMODE_NORMALP;
break;
case '1':
enGopMode = VENC_GOPMODE_DUALP;
break;
case '2':
enGopMode = VENC_GOPMODE_SMARTP;
break;
case '3':
enGopMode = VENC_GOPMODE_ADVSMARTP;
break;
case '4':
enGopMode = VENC_GOPMODE_BIPREDB;
break;
default:
SAMPLE_PRT("input rcmode: %c, is invaild!\n",c);
goto Begin_Get;
}
*/
enGopMode = VENC_GOPMODE_NORMALP;
return enGopMode;
}
SAMPLE_RC_E SAMPLE_VENC_GetRcMode(void)
{
char c;
SAMPLE_RC_E enRcMode = 0;
/*
Begin_Get:
printf("please input choose rc mode!\n");
printf("\t c) cbr.\n");
printf("\t v) vbr.\n");
printf("\t a) avbr.\n");
printf("\t f) fixQp\n");
while((c = getchar()) != '\n' && c != EOF)
switch(c)
{
case 'c':
enRcMode = SAMPLE_RC_CBR;
break;
case 'v':
enRcMode = SAMPLE_RC_VBR;
break;
case 'a':
enRcMode = SAMPLE_RC_AVBR;
break;
case 'f':
enRcMode = SAMPLE_RC_FIXQP;
break;
default:
SAMPLE_PRT("input rcmode: %c, is invaild!\n",c);
goto Begin_Get;
}
*/
enRcMode = SAMPLE_RC_CBR;
return enRcMode;
}
HI_S32 SAMPLE_VENC_SYS_Init(HI_U32 u32SupplementConfig,SAMPLE_SNS_TYPE_E enSnsType)
{
HI_S32 s32Ret;
HI_U64 u64BlkSize;
VB_CONFIG_S stVbConf;
PIC_SIZE_E enSnsSize;
SIZE_S stSnsSize;
memset(&stVbConf, 0, sizeof(VB_CONFIG_S));
s32Ret = SAMPLE_COMM_VI_GetSizeBySensor(enSnsType, &enSnsSize);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("SAMPLE_COMM_VI_GetSizeBySensor failed!\n");
return s32Ret;
}
s32Ret = SAMPLE_COMM_SYS_GetPicSize(enSnsSize, &stSnsSize);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("SAMPLE_COMM_SYS_GetPicSize failed!\n");
return s32Ret;
}
u64BlkSize = COMMON_GetPicBufferSize(stSnsSize.u32Width, stSnsSize.u32Height, PIXEL_FORMAT_YVU_SEMIPLANAR_422, DATA_BITWIDTH_10, COMPRESS_MODE_NONE,DEFAULT_ALIGN);
stVbConf.astCommPool[0].u64BlkSize = u64BlkSize;
stVbConf.astCommPool[0].u32BlkCnt = 15;
u64BlkSize = COMMON_GetPicBufferSize(1920, 1080, PIXEL_FORMAT_YVU_SEMIPLANAR_422, DATA_BITWIDTH_10, COMPRESS_MODE_NONE,DEFAULT_ALIGN);
stVbConf.astCommPool[1].u64BlkSize = u64BlkSize;
stVbConf.astCommPool[1].u32BlkCnt = 15;
stVbConf.u32MaxPoolCnt = 2;
if(0 == u32SupplementConfig)
{
s32Ret = SAMPLE_COMM_SYS_Init(&stVbConf);
}
else
{
s32Ret = SAMPLE_COMM_SYS_InitWithVbSupplement(&stVbConf,u32SupplementConfig);
}
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("SAMPLE_COMM_SYS_GetPicSize failed!\n");
return s32Ret;
}
return HI_SUCCESS;
}
HI_VOID SAMPLE_VENC_SetDCFInfo(VI_PIPE ViPipe)
{
ISP_DCF_INFO_S stIspDCF;
HI_MPI_ISP_GetDCFInfo(ViPipe, &stIspDCF);
//description: Thumbnail test
strncpy((char *)stIspDCF.stIspDCFConstInfo.au8ImageDescription,"Thumbnail test",DCF_DRSCRIPTION_LENGTH);
//manufacturer: Hisilicon
strncpy((char *)stIspDCF.stIspDCFConstInfo.au8Make,"Hisilicon",DCF_DRSCRIPTION_LENGTH);
//model number: Hisilicon IP Camera
strncpy((char *)stIspDCF.stIspDCFConstInfo.au8Model,"Hisilicon IP Camera",DCF_DRSCRIPTION_LENGTH);
//firmware version: v.1.1.0
strncpy((char *)stIspDCF.stIspDCFConstInfo.au8Software,"v.1.1.0",DCF_DRSCRIPTION_LENGTH);
stIspDCF.stIspDCFConstInfo.u32FocalLength = 0x00640001;
stIspDCF.stIspDCFConstInfo.u8Contrast = 5;
stIspDCF.stIspDCFConstInfo.u8CustomRendered = 0;
stIspDCF.stIspDCFConstInfo.u8FocalLengthIn35mmFilm = 1;
stIspDCF.stIspDCFConstInfo.u8GainControl = 1;
stIspDCF.stIspDCFConstInfo.u8LightSource = 1;
stIspDCF.stIspDCFConstInfo.u8MeteringMode = 1;
stIspDCF.stIspDCFConstInfo.u8Saturation = 1;
stIspDCF.stIspDCFConstInfo.u8SceneCaptureType = 1;
stIspDCF.stIspDCFConstInfo.u8SceneType = 0;
stIspDCF.stIspDCFConstInfo.u8Sharpness = 5;
stIspDCF.stIspDCFUpdateInfo.u32ISOSpeedRatings = 500;
stIspDCF.stIspDCFUpdateInfo.u32ExposureBiasValue = 5;
stIspDCF.stIspDCFUpdateInfo.u32ExposureTime = 0x00010004;
stIspDCF.stIspDCFUpdateInfo.u32FNumber = 0x0001000f;
stIspDCF.stIspDCFUpdateInfo.u8WhiteBalance = 1;
stIspDCF.stIspDCFUpdateInfo.u8ExposureMode = 0;
stIspDCF.stIspDCFUpdateInfo.u8ExposureProgram = 1;
stIspDCF.stIspDCFUpdateInfo.u32MaxApertureValue = 0x00010001;
HI_MPI_ISP_SetDCFInfo(ViPipe, &stIspDCF);
return;
}
HI_S32 SAMPLE_VENC_VI_Init( SAMPLE_VI_CONFIG_S *pstViConfig, HI_BOOL bLowDelay, HI_U32 u32SupplementConfig)
{
HI_S32 s32Ret;
SAMPLE_SNS_TYPE_E enSnsType;
ISP_CTRL_PARAM_S stIspCtrlParam;
HI_U32 u32FrameRate;
enSnsType = pstViConfig->astViIn
海思3559的venc例程中添加hdmi显示
需积分: 11 24 浏览量
2023-03-30
10:10:45
上传
评论 1
收藏 1.43MB GZ 举报
oli2020
- 粉丝: 33
- 资源: 111
最新资源
- 5G网络基础培训课件.zip
- 2024-spring-HIT-CS-大作业
- yolo目标检测项目实验
- downloadFile-1.hc
- C++课程设计:基于Qt的航班信息管理系统
- ADS7822UVerilog驱动,前面传的有点问题
- 基于python的高性能爬虫程序,使用了多线程+缓存+xpath实现的,这里以彼-岸图库为例,实现,仅用于学习交流
- 中分辨率成像光谱仪(MODIS)烧毁面积产品信息MODIS-C6-BA-User-Guide-1.2.pdf
- Screenshot_20240427_172613_com.huawei.browser.jpg
- 关于学习Python的相关资源网站链接及相关介绍.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈