环境

  • Platform: Hi3516DV100
  • Kernel: v3.4

Hisi视频流程

VI -> VPSS -> CHN -> VENC
cat /proc/vpss ,详见官方文档proc调试

Hisi的90°旋转:

https://blog.csdn.net/wangweiqiang1325/article/details/75455395

方式:

  • 在VI采集时旋转,但有很多限制条件,详情见MPP文档
  • 在VPSS通道旋转,HI_MPI_VPSS_SetRotate

采用在VPSS通道旋转:

  1. vpss的grp(VPSS_GRP_ATTR_S)和 VPSS的CHN MODE(VPSS_CHN_MODE_S)里面的宽高,都设置为1280x720,旋转之前的默认宽高
  2. vpss ch需要设置图像格式为非压缩(很重要!!):stVpssChnMode.enCompressMode = COMPRESS_MODE_NONE;
  3. 设置vpss的通道旋转90度:HI_MPI_VPSS_SetRotate
  4. check下VPSS CHN OUTPUT RESOLUTION里面的宽高状态,是不是已经变成720x1280了?
  5. 如果第4步ok的话,venc设置为720x1280,宽高互换。

Hisi裁剪:

方式:

  • 在VI采集时裁剪
  • VPSS的group 的裁剪和 chn 的裁剪
  • 编码裁剪

采用编码裁剪:

  1. 修改VENC_ATTR_H264_S
    stH264Attr.u32PicWidth = stPicSize.u32Width/2;
    stH264Attr.u32PicHeight = stPicSize.u32Height;
  2. 在创建VENC-CHN(HI_MPI_VENC_CreateChn)之后,设置裁剪HI_MPI_VENC_SetCrop:
    VENC_CROP_CFG_S cropInfo;
    cropInfo.bEnable = HI_TRUE;
    cropInfo.stRect.s32X = stPicSize.u32Width/4;
    cropInfo.stRect.s32Y = 0;
    cropInfo.stRect.u32Width = stPicSize.u32Width/2;
    cropInfo.stRect.u32Height = stPicSize.u32Height;
    s32Ret = HI_MPI_VENC_SetCrop(VencChn, &cropInfo);
    if (s32Ret != HI_SUCCESS) {
    	SAMPLE_PRT("HI_MPI_VENC_SetCrop failed with %#x\n", s32Ret);
    	return HI_FAILURE;
    }