博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hi3531的h264压缩中改动波特率
阅读量:6975 次
发布时间:2019-06-27

本文共 3081 字,大约阅读时间需要 10 分钟。

typedef struct hiVENC_ATTR_H264_CBR_S

{
HI_U32 u32Gop;
HI_U32 u32StatTime;
HI_U32 u32ViFrmRate;
HI_FR32 fr32TargetFrmRate;
HI_U32 u32BitRate;
HI_U32 u32FluctuateLevel;
} VENC_ATTR_H264_CBR_S;

u32BitRate 平均bitrate。以kbps 为单位。

取值范围:[2, 40960]。

 

HI_S32 SAMPLE_COMM_VENC_Start(VENC_GRP VencGrp,VENC_CHN VencChn, PAYLOAD_TYPE_E enType, VIDEO_NORM_E enNorm, PIC_SIZE_E enSize, SAMPLE_RC_E enRcMode)

{
    HI_S32 s32Ret;
    VENC_CHN_ATTR_S stVencChnAttr;
    VENC_ATTR_H264_S stH264Attr;
    VENC_ATTR_H264_CBR_S    stH264Cbr;
    VENC_ATTR_H264_VBR_S    stH264Vbr;
    VENC_ATTR_H264_FIXQP_S  stH264FixQp;
    VENC_ATTR_MJPEG_S stMjpegAttr;
    VENC_ATTR_MJPEG_FIXQP_S stMjpegeFixQp;
    VENC_ATTR_JPEG_S stJpegAttr;
    SIZE_S stPicSize;

    s32Ret = SAMPLE_COMM_SYS_GetPicSize(enNorm, enSize, &stPicSize);

     if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("Get picture size failed!\n");
        return HI_FAILURE;
    }
    /******************************************
     step 1: Greate Venc Group
    ******************************************/
    s32Ret = HI_MPI_VENC_CreateGroup(VencGrp);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("HI_MPI_VENC_CreateGroup[%d] failed with %#x!\n",\
                 VencGrp, s32Ret);
        return HI_FAILURE;
    }

    /******************************************

     step 2:  Create Venc Channel
    ******************************************/
    stVencChnAttr.stVeAttr.enType = enType;
    switch(enType)
    {
        case PT_H264:
        {
            stH264Attr.u32MaxPicWidth = stPicSize.u32Width;
            stH264Attr.u32MaxPicHeight = stPicSize.u32Height;
            stH264Attr.u32PicWidth = stPicSize.u32Width;/*the picture width*/
            stH264Attr.u32PicHeight = stPicSize.u32Height;/*the picture height*/
            stH264Attr.u32BufSize  = stPicSize.u32Width * stPicSize.u32Height * 2;/*stream buffer size*/
            stH264Attr.u32Profile  = 0;/*0: baseline; 1:MP; 2:HP   ? */
            stH264Attr.bByFrame = HI_TRUE;/*get stream mode is slice mode or frame mode?*/
            stH264Attr.bField = HI_FALSE;  /* surpport frame code only for hi3516, bfield = HI_FALSE */
            stH264Attr.bMainStream = HI_TRUE; /* surpport main stream only for hi3516, bMainStream = HI_TRUE */
            stH264Attr.u32Priority = 0; /*channels precedence level. invalidate for hi3516*/
            stH264Attr.bVIField = HI_FALSE;/*the sign of the VI picture is field or frame. Invalidate for hi3516*/
            memcpy(&stVencChnAttr.stVeAttr.stAttrH264e, &stH264Attr, sizeof(VENC_ATTR_H264_S));

            if(SAMPLE_RC_CBR == enRcMode)

            {
                stVencChnAttr.stRcAttr.enRcMode = VENC_RC_MODE_H264CBR;
                stH264Cbr.u32Gop            = (VIDEO_ENCODING_MODE_PAL== enNorm)?25:30;
                stH264Cbr.u32StatTime       = 1; /* stream rate statics time(s) */
                stH264Cbr.u32ViFrmRate      = (VIDEO_ENCODING_MODE_PAL== enNorm)?

25:30;/* input (vi) frame rate */

                stH264Cbr.fr32TargetFrmRate = (VIDEO_ENCODING_MODE_PAL== enNorm)?25:30;/* target frame rate */
                switch (enSize)
                {
                  case PIC_QCIF:
                    stH264Cbr.u32BitRate = 256; /* average bit rate */
                    break;
                  case PIC_QVGA:    /* 320 * 240 */
                  case PIC_CIF: 

                    stH264Cbr.u32BitRate = 512;

                       break;

                  case PIC_D1:

                  case PIC_VGA:    /* 640 * 480 */
                    stH264Cbr.u32BitRate = 1024*2;
                       break;
                  case PIC_HD720:   /* 1280 * 720 */
                    stH264Cbr.u32BitRate = 1024*3;
                    break;
                  case PIC_HD1080:  /* 1920 * 1080 */
                      stH264Cbr.u32BitRate = 1024*6;
                    break;
                  default :
                       stH264Cbr.u32BitRate = 1024*4;
                       break;
                }

转载地址:http://pmesl.baihongyu.com/

你可能感兴趣的文章
工作后对单元测试学习的一点总结
查看>>
无线数据传输新纪录达到6Gbps
查看>>
细分差异化,钉钉为何寻求不同CRM厂商合作
查看>>
Linux使用fuser命令找出访问文件系统的进程
查看>>
智能家居联网通信技术谁将一统天下?
查看>>
重庆企业首创ZPLC技术物联网光环境系统
查看>>
《数值分析(原书第2版)》—— 0.1 多项式求值
查看>>
MEMS传感器市场扩容 国产化水平亟待提升
查看>>
ASP.NET Aries 入门开发教程1:框架下载与运行
查看>>
周鸿祎:网络攻击新时代开启 要提高安全意识
查看>>
关于Solaris的9个小技巧
查看>>
网络安全加速推进 高增长引基金布局
查看>>
Spring 数据库连接整理
查看>>
“南海云”及大数据服务中心项目启动
查看>>
Crypto++编译使用
查看>>
SQLite.swift —— 纯 Swift 封装的 SQLite 框架
查看>>
《深入理解Spark:核心思想与源码分析》——3.11节ContextCleaner的创建与启动
查看>>
“淘宝心选”上线!taobaoxinxuan.xin被阿里巴巴收购
查看>>
天猫黑科技秘密全公开!人脸识别、AR交互、3D物体云识别...
查看>>
《深入浅出iPhone/iPad开发(第2版)》——……因为每个人都想要一个!
查看>>