eyelovu 2021-05-21 15:34 采纳率: 0%
浏览 81

HI3518EV300 H265编码视频为什么只是黑白色无法显示彩色?

在使用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
};
 

  • 写回答

1条回答 默认 最新

  • 编程少年 刘小圳 2024-06-02 19:35
    关注

    检查传感器配置:
    确保您的传感器配置与实际使用的传感器型号相匹配。您提供的配置信息中提到了CONFIG_SNS0_GC2053,这表明您可能使用的是GC2053传感器。请确保传感器的配置参数(如分辨率、帧率、像素格式等)与实际传感器的规格一致。
    2.
    检查ISP配置:
    ISP(Image Signal Processor)的配置对于图像质量至关重要。您提供的ISP配置信息中,BAYER_RGGB表示使用了RGGB拜耳模式,这是常见的彩色图像传感器模式。如果ISP配置正确,那么问题可能不在于ISP。
    3.
    检查视频编码器配置:
    您提到使用了H265编码格式,这可能会影响色彩的编码方式。请检查编码器的配置,确保没有错误地设置了色彩空间为黑白(例如,某些编码器可能默认使用YUV 4:0:0格式,这将导致没有UV分量,从而显示为黑白)。
    4.
    检查视频流处理:
    您提到使用pqtool可以查看到彩色视频流,这表明视频流在编码前是彩色的。请检查编码器到解码器之间的数据流处理,确保没有在某个环节丢失了色彩信息。
    5.
    检查解码器和播放器:
    如果编码后的视频文件在播放时显示为黑白,可能是解码器或播放器的问题。请尝试使用不同的解码器和播放器来排除这个问题。
    6.
    检查文档和社区:
    您已经查看了SDK文档,但可能还需要查阅更详细的开发指南或社区论坛,以获取更多关于色彩配置和编码器设置的信息

    评论

报告相同问题?

悬赏问题

  • ¥15 Stata链式中介效应代码修改
  • ¥15 latex投稿显示click download
  • ¥15 请问读取环境变量文件失败是什么原因?
  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错