⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 video_enc.c

📁 sample on embedded linux
💻 C
📖 第 1 页 / 共 3 页
字号:
    /*step 6: stop video encode channel*/    hiRet = HI_VENC_StopCH(venc_chn);                if ( hiRet != HI_SUCCESS )    {        HI_VENC_Close();        return hiRet;    }        /*step 7: destroy video encode channel*/    hiRet = HI_VENC_DestroyCH(venc_chn, HI_FALSE);                if ( hiRet != HI_SUCCESS )    {        HI_VENC_Close();        return hiRet;    }    fclose(pfile);    return 0;}int vstart(VI_CHN vichn){	pthread_t mythread;	if ( pthread_create( &mythread, NULL, (void*)venc_start, (void*)(&vichn)) ) {		printf("error creating thread.");		return -1;	}	printf("### You can use \"vstop\" to stop saving file.###\n"); 	return 0;}int vstart_sender(VSTART_ARG_S *pVstartArg){	pthread_t mythread;	if ( pthread_create( &mythread, NULL, (void*)venc_sender_start, (void*)(pVstartArg)) ) {		printf("error creating thread.");		return -1;	}	printf("### You can use \"vstop\" to stop saving file.###\n"); 	return 0;}int vstop(VENC_CHN venc_chn){    if ( venc_chn >= VENC_MAX_CHN_NUM || venc_chn < 0 )    {        printf("vstop: invalid venc chn\n");        return -1;    }    g_s32VencStopFlag[venc_chn] = HI_TRUE;    return 0;}static VSTART_ARG_S g_struVstartArg;static HI_S32 parsearg(int argc){	HI_S32 hiRet;    VENC_CHN venc_chn;    VI_CHN   vi_chn;    if(0 == strcmp("vstart", args[0]) && strlen(args[1]) != 0 && argc == 2)	{        vi_chn = atoi(args[1]);        printf("vi_chn = %d\n", vi_chn);	    hiRet = vstart(vi_chn);	}    else if(0 == strcmp("vstart", args[0]) && strlen(args[1]) != 0 && strlen(args[2]) != 0)	{            venc_chn = atoi(args[1]);            printf("vi_chn = %d\n", venc_chn);            g_struVstartArg.viChn = venc_chn;            g_struVstartArg.ipaddr = args[2];            printf("\nipaddr %s\n",g_struVstartArg.ipaddr);                    hiRet = vstart_sender(&g_struVstartArg);	}	else if(0 == strcmp("vstop", args[0]) && strlen(args[1]) != 0)	{        venc_chn = atoi(args[1]);        printf("venc_chn = %d\n", venc_chn);        hiRet = vstop(venc_chn);	}	else if(0 == strcmp("i", args[0]) && strlen(args[1]) != 0)/*request i frame*/	{        venc_chn = atoi(args[1]);        printf("venc_chn = %d\n", venc_chn);        hiRet = HI_VENC_RequestIFrame(venc_chn);        if ( hiRet == HI_SUCCESS )        {            printf("requst i frame ok!\n");        }        CHECK_RET(hiRet);	}     else if(0 == strcmp("enc2g", args[0]) && strlen(args[1]) != 0 )/*start color2grey */	{	    venc_chn = atoi(args[1]);	    if (HI_SUCCESS == HI_VENC_EnColor2Grey(venc_chn))	    {            printf ("enable color 2 grey success\n");	    }	    else	    {	        printf ("enable color 2 grey failed\n");	    }	    return HI_SUCCESS;	        }    else if(0 == strcmp("disc2g", args[0]) && strlen(args[1]) != 0 )/*stop color2grey */	{	    venc_chn = atoi(args[1]);	    if (HI_SUCCESS == HI_VENC_DisColor2Grey(venc_chn))	    {            printf ("enable color 2 grey success\n");	    }	    else	    {	        printf ("enable color 2 grey failed\n");	    }	    return HI_SUCCESS;    }	else if(0 == strcmp("gop", args[0]) && strlen(args[1]) != 0 && strlen(args[2]) != 0)/*set I fram GOP*/	{        venc_chn = atoi(args[1]);        HI_U32 gop = atoi(args[2]);        hiRet = HI_VENC_SetSingleAttr(venc_chn, VENC_GOP, gop);        if (HI_SUCCESS != hiRet)        {            printf ("set gop failed error: %x\n", hiRet);        }        else        {            printf ("set gop successful\n");        }	}	else if(0 == strcmp("fps", args[0]) && strlen(args[1]) != 0 && strlen(args[2]) != 0)/*set target frame rate*/	{        venc_chn = atoi(args[1]);        HI_U32 vencfps = atoi(args[2]);        hiRet = HI_VENC_SetSingleAttr(venc_chn, VENC_TARGET_FRAMERATE, vencfps);        if (HI_SUCCESS != hiRet)        {            printf ("set frame rate failed error: %x\n", hiRet);        }        else        {            printf ("set frame rate successful\n");        }	}	else if(0 == strcmp("maxqp", args[0]) && strlen(args[1]) != 0 && strlen(args[2]) != 0)/*set MAXQP*/	{        venc_chn = atoi(args[1]);                HI_U32 qp = atoi(args[2]);        hiRet = HI_VENC_SetSingleAttr(venc_chn, VENC_MAX_QP, qp);        if (HI_SUCCESS != hiRet)        {            printf ("set maxqp failed error: %x\n", hiRet);        }        else        {            printf ("set maxqp successful\n");        }	}	else if(0 == strcmp("tbps", args[0]) && strlen(args[1]) != 0 && strlen(args[2]) != 0)/*set target bit rate*/	{        venc_chn = atoi(args[1]);                HI_U32 bps = atoi(args[2]);        hiRet = HI_VENC_SetSingleAttr(venc_chn, VENC_TARGET_BITRATE, bps);        if (HI_SUCCESS != hiRet)        {            printf ("set target bps failed error: %x\n", hiRet);        }        else        {            printf ("set target bps successful\n");        }	}	else if(0 == strcmp("mbps", args[0]) && strlen(args[1]) != 0 && strlen(args[2]) != 0)/*set max bitrate*/	{        venc_chn = atoi(args[1]);                HI_U32 bps = atoi(args[2]);        hiRet = HI_VENC_SetSingleAttr(venc_chn, VENC_MAXBPS, bps);        if (HI_SUCCESS != hiRet)        {            printf ("set max bps failed error: %x\n", hiRet);        }        else        {            printf ("set max bps successful\n");        }	}	else if(0 == strcmp("mode", args[0]) && strlen(args[1]) != 0 && strlen(args[2]) != 0)/*set stream mode(CRV/BR)*/	{        venc_chn = atoi(args[1]);                HI_U32 mode = atoi(args[2]);        hiRet = HI_VENC_SetSingleAttr(venc_chn, VENC_MODE, mode);        if (HI_SUCCESS != hiRet)        {            printf ("set mode(cbr/vbr) failed error: %x\n", hiRet);        }        else        {            printf ("set mode(cbr/vbr) successful\n");        }	}	else if(0 == strcmp("delay", args[0]) && strlen(args[1]) != 0 && strlen(args[2]) != 0)/*the time delay for video encoder*/	{        venc_chn = atoi(args[1]);                HI_U32 mode = atoi(args[2]);        hiRet = HI_VENC_SetSingleAttr(venc_chn, VENC_STRATEGY, mode);        if (HI_SUCCESS != hiRet)        {            printf ("set delay time failed error: %x\n", hiRet);        }        else        {            printf ("set delay time successful\n");        }    }    else if(0 == strcmp("bqp", args[0]) && strlen(args[1]) != 0 && strlen(args[2]) != 0)/*set baseQP*/	{        venc_chn = atoi(args[1]);                HI_U32 bqp = atoi(args[2]);        hiRet = HI_VENC_SetSingleAttr(venc_chn, VENC_BASEQP, bqp);        if (HI_SUCCESS != hiRet)        {            printf ("set baseqp failed error: %x\n", hiRet);        }        else        {            printf ("set baseqp successful\n");        }	}    else if(0 == strcmp("pre", args[0]) && strlen(args[1]) != 0 && strlen(args[2]) != 0)/*set preference*/	{        venc_chn = atoi(args[1]);                HI_U32 pre = atoi(args[2]);        hiRet = HI_VENC_SetSingleAttr(venc_chn, VENC_PREFRAMERATE, pre);        if (HI_SUCCESS != hiRet)        {            printf ("set preferframerate failed error: %x\n", hiRet);        }        else        {            printf ("set preferframerate successful\n");        }	}	else if(0 == strcmp("umv", args[0]) && strlen(args[1]) != 0 && strlen(args[2]) != 0)/*set UMV*/	{	    venc_chn = atoi(args[1]);         HI_U32 width = atoi(args[2]);        hiRet = HI_VENC_SetSingleAttr(venc_chn, VENC_UMV, width);        if (HI_SUCCESS != hiRet)        {            printf ("set UMV failed error: %x\n", hiRet);        }        else        {            printf ("set UMV successful\n");        }	}	else if(0 == strcmp("df", args[0]) && strlen(args[1]) != 0 && strlen(args[2]) != 0)/*set DF*/	{	    venc_chn = atoi(args[1]);         HI_U32 width = atoi(args[2]);        hiRet = HI_VENC_SetSingleAttr(venc_chn, VENC_DF, width);        if (HI_SUCCESS != hiRet)        {            printf ("set DF failed error: %x\n", hiRet);        }        else        {            printf ("set DF successful\n");        }	}	else if(0 == strcmp("mq", args[0]) && strlen(args[1]) != 0 && strlen(args[2]) != 0)/*set MQ*/	{	    venc_chn = atoi(args[1]);         HI_U32 width = atoi(args[2]);        hiRet = HI_VENC_SetSingleAttr(venc_chn, VENC_MQ, width);        if (HI_SUCCESS != hiRet)        {            printf ("set MQ failed error: %x\n", hiRet);        }        else        {            printf ("set MQ successful\n");        }	}	else if(0 == strcmp("updatetime", args[0]) && strlen(args[1]) != 0 && strlen(args[2]) != 0)/*set updatetime[1,4]*/	{	    venc_chn = atoi(args[1]);         HI_U32 width = atoi(args[2]);        hiRet = HI_VENC_SetSingleAttr(venc_chn, VENC_UPDATETIME, width);        if (HI_SUCCESS != hiRet)        {            printf ("set updatetime failed error: %x\n", hiRet);        }        else        {            printf ("set updatetime successful\n");        }	}	else if(0 == strcmp("userdata", args[0]) && strlen(args[1]) != 0)/*insert userdata*/	{        venc_chn = atoi(args[1]);        printf("venc_chn = %d\n", venc_chn);        HI_CHAR userdata[256];        sprintf(userdata, "welcome to hisilicon!\n");        hiRet = HI_VENC_InsertUserInfo(venc_chn, userdata, strlen(userdata));        CHECK_RET(hiRet);	}	else if ( 0 == strcmp("get", args[0]) && strlen(args[1]) != 0 ) /*get the attribut of channel*/    {        VENC_CONFIG_S venc_config;        venc_chn = atoi(args[1]);        switch (format)        {            case VENC_FORMAT_H263:            {                VENC_CONFIG_H263_S vencH263;                hiRet = HI_VENC_GetAttr(venc_chn, &vencH263);                if ( hiRet == HI_SUCCESS )                {                    printf("w:%u h:%u tbps:%u fps:%u maxQP:%u UMV:%u DF:%u  MQ:%u prefreframerate: %u updattime: %u\n",vencH263.u32PicWidth, vencH263.u32PicHeight, vencH263.u32TargetBitrate,                         vencH263.u32TargetFramerate, vencH263.u32MaxQP,vencH263.u32UMV,vencH263.u32DF, vencH263.u32MQ,                        vencH263.u32PreferFrameRate, vencH263.UpdateTime);                }                else                 {                    printf ("error code: %x\n", hiRet);                }            }            break;            case VENC_FORMAT_H264:            {                VENC_CONFIG_H264_S vencH264;                hiRet = HI_VENC_GetAttr(venc_chn, &vencH264);                if ( hiRet == HI_SUCCESS )                {                    printf("mode:%u w:%u h:%u tbps:%u mbps:%u fps:%u gop:%u maxQP:%u baseqp:%u prefreframerate: %u, delay: %d\n",vencH264.u32VencMode,vencH264.u32PicWidth, vencH264.u32PicHeight, vencH264.u32TargetBitrate,                         vencH264.u32MaxBitRate,vencH264.u32TargetFramerate, vencH264.u32Gop,vencH264.u32MaxQP,vencH264.u32BaseQP,                        vencH264.u32PreferFrameRate, vencH264.u32Strategy);                }                else                 {                    printf ("error code: %x\n", hiRet);                }            }             break;            default:                printf ("invvalid venc format");                break;        }        return HI_SUCCESS;    }	else	{	    printf("cmd: \n");	    printf("vstart x (w h fps)     : save stream of channel x for h.264 and h.263\n");        printf("vstart vichn: ipaddr   : send stream of channel x by rtp to ipaddr for h.264\n");	    printf("vstop  chn             : stop saving stream of channel x for h.264 and h.263\n");	    printf("tbps   chn   x         : set target bps to [chn] [x] for h.264 and h.263\n");	    printf("mbps   chn   x         : set max bps to [chn] [x] for h.264\n");	    printf("mode   chn   x         : set vbr/cbr to [chn] [x], 0 stand cbr,1 stand vbr for h.264\n");        printf("fps    chn   x         : set fps to [chn] [x] for h.264 and h.263\n");        printf("pre    chn   x         : set preferframerate to [x] for h.264 and h.263\n");	    printf("maxqp  chn   x         : set max QP to [chn] [x] for h.264 and h.263\n");	    printf("bqp    chn   x         : set base QP to [chn] [x] for h.264\n");	    printf("gop    chn   x         : set gop to [chn] [x] for h.264\n");	    printf("delay  chn   x         : set time delay [chn] [x] ms for h.264\n");	    printf("get    chn             : get attr info of [chn] for h.264 and h.263\n");	    printf("i      chn             : request i frame at channel [chn] for h.264\n");	    printf("enc2g  chn             : enable color2grey [chn] for h.264 and h.263\n");	    printf("disc2g chn             : disable color2grey [chn] for h.264 and h.263\n");	    printf("umv    chn   x         : set umv [chn] [x] for h.263\n");	    printf("df     chn   x         : set df [chn]  for h.263\n");	    printf("mq     chn   x         : set mq [chn] for h.263\n");	    printf("updatetime  chn   x    : set updatetime [chn] for h.263\n");  	    printf("userdata    chn        : insert userdat to  [chn] for h.264\n");	    printf("q                      : exit  for h.263 and h.264\n");	}        return HI_SUCCESS;}static int adjust_str(char *ptr){	int i;	while(*ptr==' ' && *ptr++ != '\0');	for(i=strlen(ptr);i>0;i--)	{		if(*(ptr+i-1) == 0x0a || *(ptr+i-1) == ' ')			*(ptr+i-1) = '\0';		else			break;	}	for(i=0;i<10;i++)	{		int j = 0;		while(*ptr==' ' && *ptr++ != '\0');				while((*ptr !=' ') && (*ptr!='\0'))		{			args[i][j++] = *ptr++;		}		args[i][j] = '\0';		if('\0' == *ptr)		{			i++;			break;		}		args[i][j] = '\0';	}	return i;}int main(int argc, char* argv[]){    char buffer[256];    char *ptr;        VENC_INIT_S    venc_init;    HI_S32 hiRet;     /*step 1: config A/D devide*/    hiRet = ADconfig(mode, normal);	if (HI_SUCCESS != hiRet)	{	    printf ("ADconfig failed\n");        HI_VENC_Close();	    return hiRet;	}	/*step 2: config VI public channel*/	hiRet = ViPubConfig(mode, normal, format);	if (HI_SUCCESS != hiRet)	{	    printf ("vi public atr config failed\n");        HI_VENC_Close();	    return hiRet;	}       for(;;)    {        printf("> ");        ptr = fgets(buffer, 255, stdin);        memset(args, 0, sizeof(args));        argc = adjust_str(ptr);        if(0 == strcmp("q", args[0]) || 0 == strcmp("Q", args[0]))        {            printf("Please wait...\n");            sleep(2);            HI_VENC_Close();            return 0;        }        parsearg(argc);    }     return 0;}#ifdef __cplusplus#if __cplusplus}#endif#endif /* End of #ifdef __cplusplus */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -