在使用HI3518EV300SDK进行可视门铃开发中,选择使用的PIXEL_FORMAT_YVU_SEMIPLANAR_420视频输入输出格式使用H265格式进行编码。编码后的文件无论怎么都是显示的黑白颜色。但是使用pqtool的视频流又能看到彩色。只是pq_stream关键部分只有库没有源代码。我查看了SDK中所有的文档,未找到相关问题的解决方案,我也参照PQTOOL中读取的sensor(GC2053)参数修改了参数,也不起作用。还想尝试从数据流里分析下YUV数据里是否有UV色彩分量,但是由于不知道H265数据的具体格式以及是否受数据编码格式SAMPLE_RC_AVBR的影响,无法分析出来。现在我把我初始化里的配置信息贴出来,希望有大神能帮我分析下我无法正常显示彩色的原因,指导下我可以通过修改哪个参数来实现彩色。谢谢!
static ISP_PUB_ATTR_S g_isp_pub_attr = {
#if defined CONFIG_SNS0_SC2231
{0, 0, 1920, 1080},
{1920, 1080},
30,
BAYER_BGGR,
WDR_MODE_NONE,
0,
#elif defined CONFIG_SNS0_GC2053
{0, 0, 1920, 1080},
{1920, 1080},
20,
BAYER_RGGB,
WDR_MODE_NONE,
0,
#else
#error "should define sensor type first"
#endif
};
HI_U16 g_default_ccm[CCM_MATRIX_SIZE] = {
0x0037, 0x00B7, 0x0012,
0x0037, 0x00B7, 0x0012,
0x0037, 0x00B7, 0x0012
};
static SAMPLE_VI_CONFIG_S g_vi_cfg = {
.astViInfo[0].stDevInfo.ViDev = 0,
.astViInfo[0].stDevInfo.enWDRMode = WDR_MODE_NONE,
.astViInfo[0].stPipeInfo.enMastPipeMode = VI_ONLINE_VPSS_ONLINE,
.astViInfo[0].stPipeInfo.aPipe[0] = 0,
.astViInfo[0].stPipeInfo.aPipe[1] = -1,
.astViInfo[0].stPipeInfo.bMultiPipe = HI_FALSE,
.astViInfo[0].stPipeInfo.bVcNumCfged = HI_FALSE,
.astViInfo[0].stChnInfo.ViChn = 0,
// .astViInfo[0].stChnInfo.u32Depth = 0,
.astViInfo[0].stChnInfo.enPixFormat = PIXEL_FORMAT_YVU_SEMIPLANAR_420,
.astViInfo[0].stChnInfo.enDynamicRange = DYNAMIC_RANGE_SDR8,
.astViInfo[0].stChnInfo.enVideoFormat = VIDEO_FORMAT_LINEAR,
.astViInfo[0].stChnInfo.enCompressMode = COMPRESS_MODE_NONE,
.s32WorkingViNum = 1,
.as32WorkingViId[0] = 0,
};
static SIZE_S g_st_size = {1920, 1080};
PIC_SIZE_E g_size = PIC_1080P;
static VPSS_GRP_ATTR_S g_vpss_grp_attr = {
.stFrameRate.s32SrcFrameRate = -1,
.stFrameRate.s32DstFrameRate = -1,
.enDynamicRange = DYNAMIC_RANGE_SDR8,
.enPixelFormat = PIXEL_FORMAT_YVU_SEMIPLANAR_420,
.u32MaxW = 1920,
.u32MaxH = 1080,
.bNrEn = HI_TRUE,
.stNrAttr.enNrType = VPSS_NR_TYPE_VIDEO,
.stNrAttr.enCompressMode = COMPRESS_MODE_FRAME,
.stNrAttr.enNrMotionMode = NR_MOTION_MODE_NORMAL,
};
/* vpss */
static BTK_IOTC_MEDIA_VPSS_CHN_ATTR g_vpss_chn_attr = {
.chn_enable[0] = HI_TRUE,
.chn_enable[1] = HI_TRUE,
.vpss_chn_attr[0].u32Width = 1920,
.vpss_chn_attr[0].u32Height = 1080,
.vpss_chn_attr[0].u32Depth = 0,
.vpss_chn_attr[0].bMirror = HI_FALSE,
.vpss_chn_attr[0].bFlip = HI_FALSE,
.vpss_chn_attr[0].enChnMode = VPSS_CHN_MODE_USER,
.vpss_chn_attr[0].enCompressMode = COMPRESS_MODE_NONE,
.vpss_chn_attr[0].enDynamicRange = DYNAMIC_RANGE_SDR8,
.vpss_chn_attr[0].enVideoFormat = VIDEO_FORMAT_LINEAR,
.vpss_chn_attr[0].enPixelFormat = PIXEL_FORMAT_YVU_SEMIPLANAR_420,
.vpss_chn_attr[0].stFrameRate.s32SrcFrameRate = 25,
.vpss_chn_attr[0].stFrameRate.s32DstFrameRate = 25,
.vpss_chn_attr[1].u32Width = 640,
.vpss_chn_attr[1].u32Height = 360,
.vpss_chn_attr[1].u32Depth = 1,
.vpss_chn_attr[1].bMirror = HI_FALSE,
.vpss_chn_attr[1].bFlip = HI_FALSE,
.vpss_chn_attr[1].enChnMode = VPSS_CHN_MODE_USER,
.vpss_chn_attr[1].enCompressMode = COMPRESS_MODE_NONE,
.vpss_chn_attr[1].enDynamicRange = DYNAMIC_RANGE_SDR8,
.vpss_chn_attr[1].enVideoFormat = VIDEO_FORMAT_LINEAR,
.vpss_chn_attr[1].enPixelFormat = PIXEL_FORMAT_YVU_SEMIPLANAR_420,
.vpss_chn_attr[1].stFrameRate.s32SrcFrameRate = -1,
.vpss_chn_attr[1].stFrameRate.s32DstFrameRate = -1,
};
static BTK_IOTC_MEDIA_VENC_ATTR g_venc_attr = {
.venc_chn = 0,
.type = PT_H265,
.rc_mode = SAMPLE_RC_AVBR,
.profile = 0,
.rcn_ref_share_buf = HI_TRUE,
.gop_attr.enGopMode = VENC_GOPMODE_NORMALP,//VENC_GOPMODE_SMARTP,
.gop_attr.stNormalP.s32IPQpDelta = 4
};