zxf_meian

zxf_meian

0个粉丝

3

问答

0

专栏

0

资料

zxf_meian  发布于  2017-11-24 09:50:32
采纳率 0%
3个问答
2763

运行sample_venc生成的视频完全花屏

 
运行海思3518ev200,把生成的视频stream_chn0.h264上传到电脑里面,使用暴风影音播放,画面如图,
整个视频都是这种画面,是什么问题啊?
我来回答
回答2个
时间排序
认可量排序

zxf_meian

0个粉丝

3

问答

0

专栏

0

资料

zxf_meian 2017-11-24 17:02:44
认可0


/******************************************************************************
* function :  H.264@1080p@30fps+H.264@VGA@30fps


******************************************************************************/
HI_S32 SAMPLE_VENC_1080P_CLASSIC(HI_VOID)
{
    PAYLOAD_TYPE_E enPayLoad[3]= {PT_H264, PT_H264,PT_H264};
    PIC_SIZE_E enSize[3] = {PIC_HD720, PIC_VGA,PIC_QVGA};
        HI_U32 u32Profile = 0;
       
    VB_CONF_S stVbConf;
    SAMPLE_VI_CONFIG_S stViConfig = {0};
   
    VPSS_GRP VpssGrp;
    VPSS_CHN VpssChn;
    VPSS_GRP_ATTR_S stVpssGrpAttr;
    VPSS_CHN_ATTR_S stVpssChnAttr;
    VPSS_CHN_MODE_S stVpssChnMode;
   
    VENC_CHN VencChn;
    SAMPLE_RC_E enRcMode= SAMPLE_RC_CBR;
       
    HI_S32 s32ChnNum=0;
   
    HI_S32 s32Ret = HI_SUCCESS;
    HI_U32 u32BlkSize;
    SIZE_S stSize;
    char c;


    /******************************************
     step  1: init sys variable
    ******************************************/
    memset(&stVbConf,0,sizeof(VB_CONF_S));
   
        SAMPLE_COMM_VI_GetSizeBySensor(&enSize[0]);
    if (PIC_HD1080 == enSize[0])
    {
        enSize[1] = PIC_VGA;
                s32ChnNum = 2;
    }
    else if (PIC_HD720 == enSize[0])
    {
        enSize[1] = PIC_VGA;                       
                enSize[2] = PIC_QVGA;
                s32ChnNum = 1;
    }
    else
    {
        printf("not support this sensor\n");
        return HI_FAILURE;
    }
#ifdef hi3518ev201
        s32ChnNum = 1;
#endif
        printf("s32ChnNum = %d\n",s32ChnNum);

    stVbConf.u32MaxPoolCnt = 3;//128;

    /*video buffer*/
        if(s32ChnNum >= 1)
    {
            u32BlkSize = SAMPLE_COMM_SYS_CalcPicVbBlkSize(gs_enNorm,\
                        enSize[0], SAMPLE_PIXEL_FORMAT, SAMPLE_SYS_ALIGN_WIDTH);
            stVbConf.astCommPool[0].u32BlkSize = u32BlkSize;
            stVbConf.astCommPool[0].u32BlkCnt =2;//g_u32BlkCnt;
                printf("u32BlkSize1 = %d\n",u32BlkSize);
        }
        if(s32ChnNum >= 2)
    {
            u32BlkSize = SAMPLE_COMM_SYS_CalcPicVbBlkSize(gs_enNorm,\
                        enSize[1], SAMPLE_PIXEL_FORMAT, SAMPLE_SYS_ALIGN_WIDTH);
            stVbConf.astCommPool[1].u32BlkSize = u32BlkSize;
            stVbConf.astCommPool[1].u32BlkCnt =g_u32BlkCnt;
                printf("u32BlkSize2 = %d\n",u32BlkSize);
        }
        if(s32ChnNum >= 3)
    {
                u32BlkSize = SAMPLE_COMM_SYS_CalcPicVbBlkSize(gs_enNorm,\
                enSize[2], SAMPLE_PIXEL_FORMAT, SAMPLE_SYS_ALIGN_WIDTH);
                stVbConf.astCommPool[2].u32BlkSize = u32BlkSize;
                stVbConf.astCommPool[2].u32BlkCnt = g_u32BlkCnt;
                printf("u32BlkSize3 = %d\n",u32BlkSize);
    }

    /******************************************
     step 2: mpp system init.
    ******************************************/
    s32Ret = SAMPLE_COMM_SYS_Init(&stVbConf);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("system init failed with %d!\n", s32Ret);
        goto END_VENC_1080P_CLASSIC_0;
    }

    /******************************************
     step 3: start vi dev & chn to capture
    ******************************************/
    stViConfig.enViMode   = SENSOR_TYPE;
    stViConfig.enRotate   = ROTATE_NONE;
    stViConfig.enNorm     = VIDEO_ENCODING_MODE_NTSC;
    stViConfig.enViChnSet = VI_CHN_SET_NORMAL;
    stViConfig.enWDRMode  = WDR_MODE_NONE;
    s32Ret = SAMPLE_COMM_VI_StartVi(&stViConfig);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("start vi failed!\n");
        goto END_VENC_1080P_CLASSIC_1;
    }
   
    /******************************************
     step 4: start vpss and vi bind vpss
    ******************************************/
    s32Ret = SAMPLE_COMM_SYS_GetPicSize(gs_enNorm, enSize[0], &stSize);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("SAMPLE_COMM_SYS_GetPicSize failed!\n");
        goto END_VENC_1080P_CLASSIC_1;
    }
        if(s32ChnNum >= 1)
        {
                VpssGrp = 0;
            stVpssGrpAttr.u32MaxW = stSize.u32Width;
            stVpssGrpAttr.u32MaxH = stSize.u32Height;
            stVpssGrpAttr.bIeEn = HI_FALSE;
            stVpssGrpAttr.bNrEn = HI_TRUE;
            stVpssGrpAttr.bHistEn = HI_FALSE;
            stVpssGrpAttr.bDciEn = HI_FALSE;
            stVpssGrpAttr.enDieMode = VPSS_DIE_MODE_NODIE;
            stVpssGrpAttr.enPixFmt = PIXEL_FORMAT_YUV_SEMIPLANAR_420;
               
            s32Ret = SAMPLE_COMM_VPSS_StartGroup(VpssGrp, &stVpssGrpAttr);
            if (HI_SUCCESS != s32Ret)
            {
                SAMPLE_PRT("Start Vpss failed!\n");
                goto END_VENC_1080P_CLASSIC_2;
            }

            s32Ret = SAMPLE_COMM_VI_BindVpss(stViConfig.enViMode);
            if (HI_SUCCESS != s32Ret)
            {
                SAMPLE_PRT("Vi bind Vpss failed!\n");
                goto END_VENC_1080P_CLASSIC_3;
            }

                VpssChn = 0;
            stVpssChnMode.enChnMode      = VPSS_CHN_MODE_USER;
            stVpssChnMode.bDouble        = HI_FALSE;
            stVpssChnMode.enPixelFormat  = PIXEL_FORMAT_YUV_SEMIPLANAR_420;
            stVpssChnMode.u32Width       = stSize.u32Width;
            stVpssChnMode.u32Height      = stSize.u32Height;
            stVpssChnMode.enCompressMode = COMPRESS_MODE_NONE;
            memset(&stVpssChnAttr, 0, sizeof(stVpssChnAttr));
            stVpssChnAttr.s32SrcFrameRate = -1;
            stVpssChnAttr.s32DstFrameRate = -1;
            s32Ret = SAMPLE_COMM_VPSS_EnableChn(VpssGrp, VpssChn, &stVpssChnAttr, &stVpssChnMode, HI_NULL);
            if (HI_SUCCESS != s32Ret)
            {
                SAMPLE_PRT("Enable vpss chn failed!\n");
                goto END_VENC_1080P_CLASSIC_4;
            }
        }

        if(s32ChnNum >= 2)
        {
                s32Ret = SAMPLE_COMM_SYS_GetPicSize(gs_enNorm, enSize[1], &stSize);
            if (HI_SUCCESS != s32Ret)
            {
                SAMPLE_PRT("SAMPLE_COMM_SYS_GetPicSize failed!\n");
                goto END_VENC_1080P_CLASSIC_4;
            }
            VpssChn = 1;
            stVpssChnMode.enChnMode       = VPSS_CHN_MODE_USER;
            stVpssChnMode.bDouble         = HI_FALSE;
            stVpssChnMode.enPixelFormat   = PIXEL_FORMAT_YUV_SEMIPLANAR_420;
            stVpssChnMode.u32Width        = stSize.u32Width;
            stVpssChnMode.u32Height       = stSize.u32Height;
            stVpssChnMode.enCompressMode  = COMPRESS_MODE_SEG;
            stVpssChnAttr.s32SrcFrameRate = -1;
            stVpssChnAttr.s32DstFrameRate = -1;
            s32Ret = SAMPLE_COMM_VPSS_EnableChn(VpssGrp, VpssChn, &stVpssChnAttr, &stVpssChnMode, HI_NULL);
            if (HI_SUCCESS != s32Ret)
            {
                SAMPLE_PRT("Enable vpss chn failed!\n");
                goto END_VENC_1080P_CLASSIC_4;
            }
        }
       

        if(s32ChnNum >= 3)
        {       
                s32Ret = SAMPLE_COMM_SYS_GetPicSize(gs_enNorm, enSize[2], &stSize);
            if (HI_SUCCESS != s32Ret)
            {
                SAMPLE_PRT("SAMPLE_COMM_SYS_GetPicSize failed!\n");
                goto END_VENC_1080P_CLASSIC_4;
            }
                VpssChn = 2;
                stVpssChnMode.enChnMode         = VPSS_CHN_MODE_USER;
                stVpssChnMode.bDouble                = HI_FALSE;
                stVpssChnMode.enPixelFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_420;
                stVpssChnMode.u32Width                = stSize.u32Width;
                stVpssChnMode.u32Height         = stSize.u32Height;
                stVpssChnMode.enCompressMode = COMPRESS_MODE_NONE;
               
                stVpssChnAttr.s32SrcFrameRate = -1;
                stVpssChnAttr.s32DstFrameRate = -1;
               
                s32Ret = SAMPLE_COMM_VPSS_EnableChn(VpssGrp, VpssChn, &stVpssChnAttr, &stVpssChnMode, HI_NULL);
                if (HI_SUCCESS != s32Ret)
                {
                        SAMPLE_PRT("Enable vpss chn failed!\n");
                        goto END_VENC_1080P_CLASSIC_4;
                }
        }
    /******************************************
     step 5: start stream venc
    ******************************************/
    /*** HD1080P **/
    printf("\t c) cbr.\n");
    printf("\t v) vbr.\n");
    printf("\t f) fixQp\n");
    printf("please input choose rc mode!\n");
    c = (char)getchar();
    switch(c)
    {
        case 'c':
            enRcMode = SAMPLE_RC_CBR;
            break;
        case 'v':
            enRcMode = SAMPLE_RC_VBR;
            break;
        case 'f':
            enRcMode = SAMPLE_RC_FIXQP;
            break;
        default:
            printf("rc mode! is invaild!\n");
            goto END_VENC_1080P_CLASSIC_4;
    }

        /*** enSize[0] **/
        if(s32ChnNum >= 1)
        {
                VpssGrp = 0;
            VpssChn = 0;
            VencChn = 0;
            s32Ret = SAMPLE_COMM_VENC_Start(VencChn, enPayLoad[0],\
                                           gs_enNorm, enSize[0], enRcMode,u32Profile);
            if (HI_SUCCESS != s32Ret)
            {
                SAMPLE_PRT("Start Venc failed!\n");
                goto END_VENC_1080P_CLASSIC_5;
            }

            s32Ret = SAMPLE_COMM_VENC_BindVpss(VencChn, VpssGrp, VpssChn);
            if (HI_SUCCESS != s32Ret)
            {
                SAMPLE_PRT("Start Venc failed!\n");
                goto END_VENC_1080P_CLASSIC_5;
            }
        }

        /*** enSize[1] **/
        if(s32ChnNum >= 2)
        {
                VpssChn = 1;
            VencChn = 1;
            s32Ret = SAMPLE_COMM_VENC_Start(VencChn, enPayLoad[1], \
                                            gs_enNorm, enSize[1], enRcMode,u32Profile);
            if (HI_SUCCESS != s32Ret)
            {
                SAMPLE_PRT("Start Venc failed!\n");
                goto END_VENC_1080P_CLASSIC_5;
            }

            s32Ret = SAMPLE_COMM_VENC_BindVpss(VencChn, VpssGrp, VpssChn);
            if (HI_SUCCESS != s32Ret)
            {
                SAMPLE_PRT("Start Venc failed!\n");
                goto END_VENC_1080P_CLASSIC_5;
            }
        }
        /*** enSize[2] **/
        if(s32ChnNum >= 3)
        {
            VpssChn = 2;
            VencChn = 2;
            s32Ret = SAMPLE_COMM_VENC_Start(VencChn, enPayLoad[2], \
                                            gs_enNorm, enSize[2], enRcMode,u32Profile);
            if (HI_SUCCESS != s32Ret)
            {
                SAMPLE_PRT("Start Venc failed!\n");
                goto END_VENC_1080P_CLASSIC_5;
            }

            s32Ret = SAMPLE_COMM_VENC_BindVpss(VencChn, VpssGrp, VpssChn);
            if (HI_SUCCESS != s32Ret)
            {
                SAMPLE_PRT("Start Venc failed!\n");
                goto END_VENC_1080P_CLASSIC_5;
            }
        }
    /******************************************
     step 6: stream venc process -- get stream, then save it to file.
    ******************************************/
printf("TG\n");
        s32Ret = SAMPLE_COMM_VENC_StartGetStream(s32ChnNum);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("Start Venc failed!\n");
        goto END_VENC_1080P_CLASSIC_5;
    }

    printf("please press twice ENTER to exit this sample\n");
    getchar();
    getchar();

    /******************************************
     step 7: exit process
    ******************************************/
    SAMPLE_COMM_VENC_StopGetStream();
   
END_VENC_1080P_CLASSIC_5:
       
    VpssGrp = 0;
        switch(s32ChnNum)
        {
                case 3:
                        VpssChn = 2;   
                    VencChn = 2;
                    SAMPLE_COMM_VENC_UnBindVpss(VencChn, VpssGrp, VpssChn);
                    SAMPLE_COMM_VENC_Stop(VencChn);
                case 2:
                        VpssChn = 1;   
                    VencChn = 1;
                    SAMPLE_COMM_VENC_UnBindVpss(VencChn, VpssGrp, VpssChn);
                    SAMPLE_COMM_VENC_Stop(VencChn);
                case 1:
                        VpssChn = 0;  
                    VencChn = 0;
                    SAMPLE_COMM_VENC_UnBindVpss(VencChn, VpssGrp, VpssChn);
                    SAMPLE_COMM_VENC_Stop(VencChn);
                        break;
                       
        }
    SAMPLE_COMM_VI_UnBindVpss(stViConfig.enViMode);
       
END_VENC_1080P_CLASSIC_4:        //vpss stop

    VpssGrp = 0;
        switch(s32ChnNum)
        {
                case 3:
                        VpssChn = 2;
                        SAMPLE_COMM_VPSS_DisableChn(VpssGrp, VpssChn);
                case 2:
                        VpssChn = 1;
                        SAMPLE_COMM_VPSS_DisableChn(VpssGrp, VpssChn);
                case 1:
                        VpssChn = 0;
                        SAMPLE_COMM_VPSS_DisableChn(VpssGrp, VpssChn);
                break;
       
        }

END_VENC_1080P_CLASSIC_3:    //vpss stop      
    SAMPLE_COMM_VI_UnBindVpss(stViConfig.enViMode);
END_VENC_1080P_CLASSIC_2:    //vpss stop   
    SAMPLE_COMM_VPSS_StopGroup(VpssGrp);
END_VENC_1080P_CLASSIC_1:        //vi stop
    SAMPLE_COMM_VI_StopVi(&stViConfig);
END_VENC_1080P_CLASSIC_0:        //system exit
    SAMPLE_COMM_SYS_Exit();
   
    return s32Ret;   
}

zxf_meian

0个粉丝

3

问答

0

专栏

0

资料

zxf_meian 2017-11-25 14:43:35
认可0
问题已经解决,原因是sensor对应的.a文件有问题
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区