hi3531的h264压缩中修改波特率

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;
                }

时间: 2024-12-02 22:23:18

hi3531的h264压缩中修改波特率的相关文章

Xcode中修改变量名、类名及字符串的替换操作

Xcode中修改变量名.类名及字符串的替换操作         在做iOS开发代码优化的工作时,优化代码结构之前,我们应该先整理好工程的外貌,将文件和类的命名进行规范,在Xcode中为我们提供了方便而强大的名称修改功能. 第一步:修改类名         将鼠标点击放在类的名称上,选择Xcode工具栏中的edit->refactor->rename: 之后,将类名更改为我们需要的模式点击preview,记得将下面的关联文件勾选: Xcode会为我们检测出需要更改的地方,浏览无误后点击save.

框架-如何在android framework中修改webview禁掉软键盘

问题描述 如何在android framework中修改webview禁掉软键盘 5C 如题,在webview调用的网页中,点击input标签后会弹出软键盘,现在有个需求需要禁用软键盘,用户会通过遥控输入,请问该如何修改 解决方案 调用hideKeyBoard()可以禁用软键盘 解决方案二: 在当前界面 隐藏掉 软键盘 调用hideKeyBoard()可以禁用软键盘 解决方案三: 对应的activity设置windowSoftInputMode-stateAlwaysHidden

Linux中修改/etc/profile或者$HOME/.profile文件后如何立即生效?

Linux中修改/etc/profile或者$HOME/.profile文件后如何立即生效? 当我们在管理/etc/profile文件时,进行了一些定制的修改,哪么如何才能立即生效呢? [root@localhost~]# vi /etc/profile# /etc/profile # System wide environment and startup programs, for login setup# Functions and aliases go in /etc/bashrc # I

js-在foreach标签中修改style属性

问题描述 在foreach标签中修改style属性 代码: html <body onload="test();"> <form name="f1" method="post" action=""> <c:forEach items="${list}" varStatus="state" var="dto"> <input s

MySQL 中修改密码及访问限制设置详解

mysql|访问|详解 MySQL中修改密码及访问限制设置详解 MySQL是一个真正的多用户.多线程SQL数据库服务器.MySQL是以一个客户机/服务器结构的实现,它由一个服务器守护程序mysqld和很多不同的客户程序和库组成.由于其源码的开放性及稳定性,且与网站流行编?挥镅?PHP的完美结合,现在很多站点都利用其当作后端数据库,使其获得了广泛应用.处于安全方面的考虑,需要为每一用户赋于对不同数据库的访问限制,以满足不同用户的要求.下面就分别讨论,供大家参考. 一.MySQL修改密码方法总结 首

WebSphere反向投资者:在WebSphere Application Server中修改主机名称并迁移概

WebSphere反向投资者:在WebSphere Application Server中修改主机名称并迁移概要文件 在每篇专栏文章中,"WebSphere 反向投资者" 将回答问题.提供指导和讨论与 WebSphere 产品使用相关的基础主题,经常会给出与流行的看法相悖的经过实践验证的建议. 改变的时机来了吗? 希腊哲学家赫拉克利特曾说过 "惟一不变的就是变化本身",并且这句话在过去 2500 年来都被证明是正确的,在某些情况下您很可能需要修改 WebSphere

在SQL Server中修改字段类型和字段名称

  在SQL Server中修改字段类型和字段名称 --以下是完整的SQL执行语句 if exists(select * from syscolumns where id=object_id('数据表名称') and name='字段名') --判断该字段是否存在 begin ALTER TABLE 表明 ALTER COLUMN 字段名 VARCHAR(64);--更改类型 end GO if exists(select * from syscolumns where id=object_id

Vista系统中修改Hosts文件

在WindowsVista中修改Hosts 文件或Lmhosts文件时,有可能会发生两种错误. 错误消息 1 拒绝访问 C:/Windows/System32/drivers/etc/ hosts 错误消息 2 不能创建文件 C:/Windows/System32/drivers/etc/hosts. 请确认路径和文件名是否正确. 即使使用拥有管理凭据的帐户登录,也会出现此问题. 替代方法 要解决此问题,请按照下列步骤操作: 1.单击"开始",单击"所有程序",单击

如何在wps文字中修改近期文档数目

  在wps文字中修改近期文档数目的方法: 一.在电脑桌面的wps文字程序图标上双击鼠标左键,将其打开运行.如图所示; 二.在打开的wps文字窗口中,点击左上角的"wps文字"命令选项.如图所示; 三.在弹出的"wps文字"命令选项对话框中,选择并点击"选项"命令选项.如图所示; 四.点击"选项"命令选项后,这个时候会弹出工作簿的"选项"对话框.如图所示; 五.在"选项"对话框中,选择左