zoukankan      html  css  js  c++  java
  • hi3531的h264压缩中修改波特率 分类: HI3531 arm-linux-Ubuntu 2014-06-18 16:24 1195人阅读 评论(0) 收藏

    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! ");
            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! ",
                     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;
                    }

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    在 Windows 上测试 Redis Cluster的集群填坑笔记
    vmware安装黑苹果教程
    微信支付v3发布到iis时的证书问题
    Linux下安装SQL Server 2016(连接篇SQL Server on linux)
    Linux下安装SQL Server 2016(连接篇SQL Server on linux)
    Linux下安装SQL Server 2016(安装篇SQL Server on linux)
    Linux下安装SQL Server 2016(准备篇SQL Server on linux)
    客服端与服务端APP支付宝支付接口联调的那些坑
    ASP.NET MVC]WebAPI应用支持HTTPS的经验总结
    .net平台下C#socket通信(中)
  • 原文地址:https://www.cnblogs.com/mao0504/p/4706601.html
Copyright © 2011-2022 走看看