hi3531的h264压缩中修改波特率

简介: <p>typedef struct hiVENC_ATTR_H264_CBR_S<br> {<br> HI_U32 u32Gop;<br> HI_U32 u32StatTime;<br> HI_U32 u32ViFrmRate;<br> HI_FR32 fr32TargetFrmRate;<br> HI_U32 u32BitRate;<br> HI_U32 u32Fluctu

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

相关文章
|
测试技术
CRC-16 MODBUS原理,附实测可用源码
之前做串口解析,CRC校验一直用和校验,就是吧各个位加在一起,新来一个串口协议,是CRC-16 MODBUS的形式校验,不会呀,从网上找了找资源,没有找到源码,都要下载,分享出来。
CRC-16 MODBUS原理,附实测可用源码
|
算法 芯片 异构计算
通过FPGA实现基于RS232串口的指令发送并控制显示器中目标位置
通过FPGA实现基于RS232串口的指令发送并控制显示器中目标位置
|
3月前
|
监控 数据处理
在使用LabVIEW控制多个串口设备进行数据读取时,读取时间过长
在使用LabVIEW控制多个串口设备进行数据读取时,读取时间过长
51 0
|
5月前
|
iOS开发 MacOS Windows
Audacity 里输出音频设备的设置问题
Audacity 里输出音频设备的设置问题
|
5月前
|
编解码 测试技术
LabVIEW NI数字万用表与开关握手扫描速率
LabVIEW NI数字万用表与开关握手扫描速率
23 0
|
5月前
|
编解码 图形学
RK3399 去掉HDMI音频
RK3399 去掉HDMI音频
52 0
|
5月前
【RTThread】修改Finsh打印串口波特率
【RTThread】修改Finsh打印串口波特率
|
内存技术
如何设置pcm值为静默音
如何设置pcm值为静默音
199 0
如何根据波特率计算设备每秒传输多少字符
如何根据波特率计算设备每秒传输多少字符
168 0
|
Unix Linux Android开发