/****************************************************************************** * funciton : snap process ******************************************************************************/ HI_S32 SAMPLE_COMM_VENC_SnapProcess(VENC_CHN VencChn, VPSS_GRP VpssGrp, VPSS_CHN VpssChn) { struct timeval TimeoutVal; fd_set read_fds; HI_S32 s32VencFd; VENC_CHN_STAT_S stStat; VENC_STREAM_S stStream; HI_S32 s32Ret; printf("press any key to snap one pic\n"); getchar(); /****************************************** step 1: Venc Chn bind to Vpss Chn ******************************************/ s32Ret = SAMPLE_COMM_VENC_BindVpss(VencChn, VpssGrp, VpssChn); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("SAMPLE_COMM_VENC_BindVpss failed!\n"); return HI_FAILURE; } /****************************************** step 2: Start Recv Venc Pictures ******************************************/ s32Ret = HI_MPI_VENC_StartRecvPic(VencChn); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("HI_MPI_VENC_StartRecvPic faild with%#x!\n", s32Ret); return HI_FAILURE; } /****************************************** step 3: recv picture ******************************************/ s32VencFd = HI_MPI_VENC_GetFd(VencChn); if (s32VencFd < 0) { SAMPLE_PRT("HI_MPI_VENC_GetFd faild with%#x!\n", s32VencFd); return HI_FAILURE; } FD_ZERO(&read_fds); FD_SET(s32VencFd, &read_fds); TimeoutVal.tv_sec = 2; TimeoutVal.tv_usec = 0; s32Ret = select(s32VencFd+1, &read_fds, NULL, NULL, &TimeoutVal); if (s32Ret < 0) { SAMPLE_PRT("snap select failed!\n"); return HI_FAILURE; } else if (0 == s32Ret) { SAMPLE_PRT("snap time out!\n"); return HI_FAILURE; } else { if (FD_ISSET(s32VencFd, &read_fds)) { s32Ret = HI_MPI_VENC_Query(VencChn, &stStat); if (s32Ret != HI_SUCCESS) { SAMPLE_PRT("HI_MPI_VENC_Query failed with %#x!\n", s32Ret); return HI_FAILURE; } stStream.pstPack = (VENC_PACK_S*)malloc(sizeof(VENC_PACK_S) * stStat.u32CurPacks); if (NULL == stStream.pstPack) { SAMPLE_PRT("malloc memory failed!\n"); return HI_FAILURE; } stStream.u32PackCount = stStat.u32CurPacks; s32Ret = HI_MPI_VENC_GetStream(VencChn, &stStream, -1); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("HI_MPI_VENC_GetStream failed with %#x!\n", s32Ret); free(stStream.pstPack); stStream.pstPack = NULL; return HI_FAILURE; } s32Ret = SAMPLE_COMM_VENC_SaveSnap(&stStream); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("HI_MPI_VENC_GetStream failed with %#x!\n", s32Ret); free(stStream.pstPack); stStream.pstPack = NULL; return HI_FAILURE; } s32Ret = HI_MPI_VENC_ReleaseStream(VencChn, &stStream); if (s32Ret) { SAMPLE_PRT("HI_MPI_VENC_ReleaseStream failed with %#x!\n", s32Ret); free(stStream.pstPack); stStream.pstPack = NULL; return HI_FAILURE; } free(stStream.pstPack); stStream.pstPack = NULL; } } /****************************************** step 4: stop recv picture ******************************************/ s32Ret = HI_MPI_VENC_StopRecvPic(VencChn); if (s32Ret != HI_SUCCESS) { SAMPLE_PRT("HI_MPI_VENC_StopRecvPic failed with %#x!\n", s32Ret); return HI_FAILURE; } /****************************************** step 5: unbind ******************************************/ s32Ret = SAMPLE_COMM_VENC_UnBindVpss(VencChn, VpssGrp, VpssChn); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("SAMPLE_COMM_VENC_UnBindVpss failed!\n"); return HI_FAILURE; } return HI_SUCCESS; }
int main(int argc, char const *argv[]) { PAYLOAD_TYPE_E enPayLoad = PT_H264; VB_CONF_S stVbConf; SAMPLE_VI_CONFIG_S stViConfig; VPSS_GRP_ATTR_S stVpssGrpAttr; VPSS_CHN_ATTR_S stVpssChnAttr; VPSS_CHN_MODE_S stVpssChnMode; VI_EXT_CHN_ATTR_S stExtChnAttr; SAMPLE_RC_E enRcMode = SAMPLE_RC_CBR; HI_S32 s32ChnNum = 1; HI_S32 s32Ret = HI_SUCCESS; HI_U32 u32BlkSize; SIZE_S stSize; int sockfd, SendSockfd; struct sockaddr_in SendServaddr; pthread_t sendvideotid, AnalyzePictid, snaptid, accepttid; int ret; MPP_CHN_S stSrcChn; MPP_CHN_S stDestChn; memset(&stVbConf, 0 , sizeof(VB_CONF_S)); stVbConf.u32MaxPoolCnt = 128; u32BlkSize = SAMPLE_COMM_SYS_CalcPicVbBlkSize(gs_enNorm, enSize, SAMPLE_PIXEL_FORMAT, SAMPLE_SYS_ALIGN_WIDTH); stVbConf.astCommPool[0].u32BlkSize = u32BlkSize; stVbConf.astCommPool[0].u32BlkCnt = 10; // u32BlkSize = SAMPLE_COMM_SYS_CalcPicVbBlkSize(gs_enNorm, // PIC_QVGA, SAMPLE_PIXEL_FORMAT, SAMPLE_SYS_ALIGN_WIDTH); // stVbConf.astCommPool[0].u32BlkSize = u32BlkSize; // stVbConf.astCommPool[0].u32BlkCnt = 10; //初始化系统 printf("-----------------------V0.01-----------------------\n"); s32Ret = SAMPLE_COMM_SYS_Init(&stVbConf); if (HI_SUCCESS != s32Ret) { printf("system init failed with err code %#x!\n", s32Ret ); } stViConfig.enViMode = SENSOR_TYPE; //stViConfig.enViMode = SONY_IMX122_DC_1080P_30FPS; stViConfig.enRotate = ROTATE_NONE; stViConfig.enNorm = VIDEO_ENCODING_MODE_AUTO; stViConfig.enViChnSet = VI_CHN_SET_NORMAL; //配置并启动VI s32Ret = SAMPLE_COMM_VI_StartVi(&stViConfig); if (HI_SUCCESS != s32Ret) { printf("start vi failed with err code %#x!\n", s32Ret); goto END_1; } stExtChnAttr.enPixFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_420; stExtChnAttr.s32BindChn = ViChn; stExtChnAttr.stDestSize.u32Width = WIDTH; stExtChnAttr.stDestSize.u32Height = HEIGHT; stExtChnAttr.s32FrameRate = -1; stExtChnAttr.s32SrcFrameRate = -1; s32Ret = HI_MPI_VI_SetExtChnAttr(ExtChn, &stExtChnAttr); if (HI_SUCCESS != s32Ret) { printf("HI_MPI_VI_SetExtChnAttr failed with err code %#x\n", s32Ret); return -1; } s32Ret = HI_MPI_VI_SetFrameDepth(1, 5); if (HI_SUCCESS != s32Ret) { printf("HI_MPI_VI_SetFrameDepth failed with err code %#x\n", s32Ret); return -1; } s32Ret = HI_MPI_VI_EnableChn(ExtChn); if (HI_SUCCESS != s32Ret) { printf("HI_MPI_VI_EnableChn failed with err code %#x\n", s32Ret); return -1; } stExtChnAttr.enPixFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_420; stExtChnAttr.s32BindChn = ViChn; stExtChnAttr.stDestSize.u32Width = WIDTH; stExtChnAttr.stDestSize.u32Height = HEIGHT; stExtChnAttr.s32FrameRate = -1; stExtChnAttr.s32SrcFrameRate = -1; s32Ret = HI_MPI_VI_SetExtChnAttr(SnapExtChn, &stExtChnAttr); if (HI_SUCCESS != s32Ret) { printf("HI_MPI_VI_SetExtChnAttr failed with err code %#x\n", s32Ret); return -1; } s32Ret = HI_MPI_VI_EnableChn(SnapExtChn); if (HI_SUCCESS != s32Ret) { printf("HI_MPI_VI_EnableChn failed with err code %#x\n", s32Ret); return -1; } #if 1 s32Ret = SAMPLE_COMM_SYS_GetPicSize(gs_enNorm, enSize, &stSize); if (HI_SUCCESS != s32Ret) { printf("SAMPLE_COMM_SYS_GetPicSize failed with err code %#x!\n", s32Ret); goto END_2; } //配置并启动VPSS组 stVpssGrpAttr.u32MaxW = stSize.u32Width; stVpssGrpAttr.u32MaxH = stSize.u32Height; stVpssGrpAttr.bDrEn = HI_FALSE; stVpssGrpAttr.bDbEn = HI_FALSE; stVpssGrpAttr.bIeEn = HI_TRUE; stVpssGrpAttr.bNrEn = HI_TRUE; stVpssGrpAttr.bHistEn = HI_TRUE; stVpssGrpAttr.enDieMode = VPSS_DIE_MODE_AUTO; stVpssGrpAttr.enPixFmt = SAMPLE_PIXEL_FORMAT; s32Ret = SAMPLE_COMM_VPSS_StartGroup(VpssGrp, &stVpssGrpAttr); if (HI_SUCCESS != s32Ret) { printf("SAMPLE_COMM_VPSS_StartGroup failed with err code %#x!\n", s32Ret); goto END_3; } //绑定VI和VPSS s32Ret = SAMPLE_COMM_VI_BindVpss(stViConfig.enViMode); if (HI_SUCCESS != s32Ret) { printf("SAMPLE_COMM_vi_BindVpss failed with err code %#x\n", s32Ret); goto END_4; } //配置并启动VPSS通道 memset(&stVpssChnAttr, 0, sizeof(stVpssChnAttr)); stVpssChnAttr.bFrameEn = HI_FALSE; stVpssChnAttr.bSpEn = HI_TRUE; stVpssChnMode.enChnMode = VPSS_CHN_MODE_USER; stVpssChnMode.bDouble = HI_FALSE; stVpssChnMode.enPixelFormat = SAMPLE_PIXEL_FORMAT; stVpssChnMode.u32Width = 1920; stVpssChnMode.u32Height = 1080; s32Ret = SAMPLE_COMM_VPSS_EnableChn(VpssGrp, VpssChn, &stVpssChnAttr, &stVpssChnMode, HI_NULL); if (HI_SUCCESS != s32Ret) { printf("SAMPLE_COMM_VPSS_EnableChn failed with err code %#x\n", s32Ret); goto END_5; } #if 0 s32Ret = SAMPLE_COMM_VENC_BindVpss(SnapVencGrp, VpssGrp, VpssChn); if (HI_SUCCESS != s32Ret) { printf("SAMPLE_COMM_VENC_BindVpss failed with err code %#x\n", s32Ret); } gs_enNorm = PIC_D1; s32Ret = SAMPLE_COMM_SYS_GetPicSize(gs_enNorm, enSize, &stSize); if (HI_SUCCESS != s32Ret) { printf("SAMPLE_COMM_SYS_GetPicSize failed with err code %#x\n", s32Ret); } #endif #endif stSrcChn.enModId = HI_ID_VIU; stSrcChn.s32DevId = 0; stSrcChn.s32ChnId = SnapExtChn; stDestChn.enModId = HI_ID_GROUP; stDestChn.s32DevId = SnapVencGrp; stDestChn.s32ChnId = 0; s32Ret = HI_MPI_SYS_Bind(&stSrcChn, &stDestChn); if (s32Ret != HI_SUCCESS) { SAMPLE_PRT("failed with %#x!\n", s32Ret); //return HI_FAILURE; } stSize.u32Width = 720; stSize.u32Height = 576; //printf("%d,%d\n",stSize.u32Width,stSize.u32Height); s32Ret = SAMPLE_COMM_VENC_SnapStart(SnapVencGrp, SnapVencChn, &stSize); if (HI_SUCCESS != s32Ret) { printf("SAMPLE_COMM_VENC_SnapStart failed with err code %#x\n", s32Ret); } #if 1 #if 0 //创建发送视频流socket //SendSockfd = socket(AF_INET, SOCK_STREAM, 0); SendSockfd = socket(AF_INET, SOCK_DGRAM, 0); if (SendSockfd == -1) { perror("send socket error"); exit(0); } memset(&SendServaddr, 0, sizeof(SendServaddr)); SendServaddr.sin_family = AF_INET; //SendServaddr.sin_addr.s_addr = htonl(INADDR_ANY); SendServaddr.sin_addr.s_addr = inet_addr("10.1.2.60"); SendServaddr.sin_port = htons(6666); #endif #if 0 if (bind(SendSockfd, (struct sockaddr *)&SendServaddr, sizeof(SendServaddr)) == -1) { perror("send bind error"); exit(0); } if (listen(SendSockfd, 10) == -1) { perror("send listen error"); exit(0); } #endif #if 0 //ret = pthread_create(&sendvideotid, 0, (HI_VOID*)SendVideoStream, SendSockfd); ret = pthread_create(&sendvideotid, 0, (HI_VOID*)SendVideoStream, 0); if (ret != 0) { perror("create SendVideoStream error"); exit(0); } printf("create SendVideoStream thread successfully!\n"); #endif #endif ret = pthread_create(&AnalyzePictid, 0, (HI_VOID*)AnalyzePic, NULL); if (ret != 0) { perror("create AnalyzePic error"); exit(0); } ret = pthread_create(&snaptid, 0, (HI_VOID*)SnapPic, NULL); if (ret != 0) { perror("create SnapPic error"); exit(0); } ret = pthread_create(&accepttid, 0, (HI_VOID*)accept_thread, NULL); if (ret != 0) { perror("create accept_thread error"); exit(0); } while (1) { sleep(10); } END_5: SAMPLE_COMM_VPSS_DisableChn(VpssGrp, VpssChn); END_4: SAMPLE_COMM_VI_UnBindVpss(stViConfig.enViMode); END_3: SAMPLE_COMM_VPSS_StopGroup(VpssGrp); END_2: SAMPLE_COMM_VI_StopVi(&stViConfig); END_1: SAMPLE_COMM_SYS_Exit(); close(SendSockfd); pthread_join(sendvideotid, NULL); return 0; }
/****************************************************************************** * function : 4D1 H264 encode ******************************************************************************/ HI_S32 SAMPLE_VENC_4D1_H264(HI_VOID) { SAMPLE_VI_MODE_E enViMode = SAMPLE_VI_MODE_4_D1; HI_U32 u32ViChnCnt = 4; HI_S32 s32VpssGrpCnt = 4; PAYLOAD_TYPE_E enPayLoad[2]= {PT_H264, PT_H264}; PIC_SIZE_E enSize[2] = {PIC_D1, PIC_CIF}; VB_CONF_S stVbConf; VPSS_GRP VpssGrp; VPSS_CHN VpssChn; VPSS_GRP_ATTR_S stGrpAttr; VENC_GRP VencGrp; VENC_CHN VencChn; SAMPLE_RC_E enRcMode; HI_S32 i; HI_S32 s32Ret = HI_SUCCESS; HI_U32 u32BlkSize; HI_CHAR ch; SIZE_S stSize; /****************************************** step 1: init variable ******************************************/ memset(&stVbConf,0,sizeof(VB_CONF_S)); u32BlkSize = SAMPLE_COMM_SYS_CalcPicVbBlkSize(gs_enNorm,\ PIC_D1, SAMPLE_PIXEL_FORMAT, SAMPLE_SYS_ALIGN_WIDTH); stVbConf.u32MaxPoolCnt = 128; stVbConf.astCommPool[0].u32BlkSize = u32BlkSize; stVbConf.astCommPool[0].u32BlkCnt = u32ViChnCnt * 6; memset(stVbConf.astCommPool[0].acMmzName,0, sizeof(stVbConf.astCommPool[0].acMmzName)); /* hist buf*/ stVbConf.astCommPool[1].u32BlkSize = (196*4); stVbConf.astCommPool[1].u32BlkCnt = u32ViChnCnt * 6; memset(stVbConf.astCommPool[1].acMmzName,0, sizeof(stVbConf.astCommPool[1].acMmzName)); /****************************************** 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_8D1_0; } /****************************************** step 3: start vi dev & chn to capture ******************************************/ s32Ret = SAMPLE_COMM_VI_Start(enViMode, gs_enNorm); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("start vi failed!\n"); goto END_VENC_8D1_0; } /****************************************** step 4: start vpss and vi bind vpss ******************************************/ s32Ret = SAMPLE_COMM_SYS_GetPicSize(gs_enNorm, PIC_D1, &stSize); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("SAMPLE_COMM_SYS_GetPicSize failed!\n"); goto END_VENC_8D1_0; } stGrpAttr.u32MaxW = stSize.u32Width; stGrpAttr.u32MaxH = stSize.u32Height; stGrpAttr.bDrEn = HI_FALSE; stGrpAttr.bDbEn = HI_FALSE; stGrpAttr.bIeEn = HI_TRUE; stGrpAttr.bNrEn = HI_TRUE; stGrpAttr.bHistEn = HI_TRUE; stGrpAttr.enDieMode = VPSS_DIE_MODE_AUTO; stGrpAttr.enPixFmt = SAMPLE_PIXEL_FORMAT; s32Ret = SAMPLE_COMM_VPSS_Start(s32VpssGrpCnt, &stSize, VPSS_MAX_CHN_NUM,NULL); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("Start Vpss failed!\n"); goto END_VENC_8D1_1; } s32Ret = SAMPLE_COMM_VI_BindVpss(enViMode); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("Vi bind Vpss failed!\n"); goto END_VENC_8D1_2; } /****************************************** step 5: select rc mode ******************************************/ while(1) { printf("please choose rc mode:\n"); printf("\t0) CBR\n"); printf("\t1) VBR\n"); printf("\t2) FIXQP\n"); ch = getchar(); getchar(); if ('0' == ch) { enRcMode = SAMPLE_RC_CBR; break; } else if ('1' == ch) { enRcMode = SAMPLE_RC_VBR; break; } else if ('2' == ch) { enRcMode = SAMPLE_RC_FIXQP; break; } else { printf("rc mode invaild! please try again.\n"); continue; } } /****************************************** step 5: start stream venc (big + little) ******************************************/ for (i=0; i<u32ViChnCnt; i++) { /*** main stream **/ VencGrp = i*2; VencChn = i*2; VpssGrp = i; s32Ret = SAMPLE_COMM_VENC_Start(VencGrp, VencChn, enPayLoad[0],\ gs_enNorm, enSize[0], enRcMode); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("Start Venc failed!\n"); goto END_VENC_8D1_2; } s32Ret = SAMPLE_COMM_VENC_BindVpss(VencGrp, VpssGrp, VPSS_BSTR_CHN); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("Start Venc failed!\n"); goto END_VENC_8D1_3; } /*** Sub stream **/ VencGrp ++; VencChn ++; s32Ret = SAMPLE_COMM_VENC_Start(VencGrp, VencChn, enPayLoad[1], \ gs_enNorm, enSize[1], enRcMode); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("Start Venc failed!\n"); goto END_VENC_8D1_3; } s32Ret = SAMPLE_COMM_VENC_BindVpss(VencChn, VpssGrp, VPSS_PRE0_CHN); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("Start Venc failed!\n"); goto END_VENC_8D1_3; } } /****************************************** step 6: stream venc process -- get stream, then save it to file. ******************************************/ s32Ret = SAMPLE_COMM_VENC_StartGetStream(u32ViChnCnt*2); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("Start Venc failed!\n"); goto END_VENC_8D1_3; } printf("please press twice ENTER to exit this sample\n"); getchar(); getchar(); /****************************************** step 7: exit process ******************************************/ SAMPLE_COMM_VENC_StopGetStream(); END_VENC_8D1_3: for (i=0; i<u32ViChnCnt*2; i++) { VencGrp = i; VencChn = i; VpssGrp = i/2; VpssChn = (VpssGrp%2)?VPSS_PRE0_CHN:VPSS_BSTR_CHN; SAMPLE_COMM_VENC_UnBindVpss(VencGrp, VpssGrp, VpssChn); SAMPLE_COMM_VENC_Stop(VencGrp,VencChn); } SAMPLE_COMM_VI_UnBindVpss(enViMode); END_VENC_8D1_2: //vpss stop SAMPLE_COMM_VPSS_Stop(s32VpssGrpCnt, VPSS_MAX_CHN_NUM); END_VENC_8D1_1: //vi stop SAMPLE_COMM_VI_Stop(enViMode); END_VENC_8D1_0: //system exit SAMPLE_COMM_SYS_Exit(); return s32Ret; }
void SendVideoStream(int Sockfd) { HI_S32 s32Ret; HI_S32 Vencfd, maxfd = 0; PAYLOAD_TYPE_E enPayLoad = PT_H264; SAMPLE_RC_E enRcMode = SAMPLE_RC_CBR; struct timeval TimeoutVal; fd_set read_fds; int connfd; VENC_STREAM_S stStream; VENC_CHN_STAT_S stStat; HI_S32 i; int SendSockfd; struct sockaddr_in SendServaddr; SendSockfd = socket(AF_INET, SOCK_DGRAM, 0); if (SendSockfd == -1) { perror("send socket error"); exit(0); } memset(&SendServaddr, 0, sizeof(SendServaddr)); SendServaddr.sin_family = AF_INET; SendServaddr.sin_addr.s_addr = inet_addr("10.1.2.60"); SendServaddr.sin_port = htons(6666); while (!isThreadStop) { #if 0 if (!isChangePic) { connfd = accept(SendSockfd, NULL, NULL); printf("connect!\n"); } isChangePic = HI_FALSE; #endif s32Ret = SAMPLE_COMM_VENC_Start(SendVencGrp, SendVencChn, enPayLoad, gs_enNorm, enSize, enRcMode); if (HI_SUCCESS != s32Ret) { printf("SAMPLE_COMM_VENC_Start failed with err code %#x\n", s32Ret); continue; } s32Ret = SAMPLE_COMM_VENC_BindVpss(SendVencGrp, VpssGrp, VpssChn); if (HI_SUCCESS != s32Ret) { printf("SAMPLE_COMM_VENC_BindVpss failed with err code %#x\n", s32Ret); continue; } Vencfd = HI_MPI_VENC_GetFd(SendVencChn); if (Vencfd < 0) { printf("HI_MPI_VENC_GetFd faild with%#x!\n", Vencfd); return HI_FAILURE; } while (isSend) { FD_ZERO(&read_fds); FD_SET(Vencfd, &read_fds); TimeoutVal.tv_sec = 20000; TimeoutVal.tv_usec = 0; s32Ret = select(Vencfd + 1, &read_fds, NULL, NULL, &TimeoutVal); if (s32Ret < 0) { perror("select failed!\n"); break; } else if (s32Ret == 0) { printf("get sendvenc stream time out,exit thread\n"); continue; } else { if (FD_ISSET(Vencfd, &read_fds)) { memset(&stStream, 0, sizeof(stStream)); s32Ret = HI_MPI_VENC_Query(SendVencChn, &stStat); if (HI_SUCCESS != s32Ret) { printf("HI_MPI_VENC_Query failed with err code %#x!\n", s32Ret); break; } stStream.pstPack = (VENC_PACK_S*)malloc(sizeof(VENC_PACK_S) * stStat.u32CurPacks); if (NULL == stStream.pstPack) { printf("malloc stream pack failed!\n"); break; } stStream.u32PackCount = stStat.u32CurPacks; s32Ret = HI_MPI_VENC_GetStream(SendVencChn, &stStream, HI_TRUE); if (HI_SUCCESS != s32Ret) { free(stStream.pstPack); stStream.pstPack = NULL; printf("HI_MPI_VENC_GetStream failed with %#x!\n", s32Ret); break; } for (i = 0; i < stStream.u32PackCount; i++) { //write(connfd, stStream.pstPack[i].pu8Addr[0], // stStream.pstPack[i].u32Len[0]); sendto(SendSockfd,stStream.pstPack[i].pu8Addr[0], stStream.pstPack[i].u32Len[0],0, (struct sockaddr*)&SendServaddr, sizeof(SendServaddr)); if (stStream.pstPack[i].u32Len[1] > 0) { //write(connfd, stStream.pstPack[i].pu8Addr[1], // stStream.pstPack[i].u32Len[1]); sendto(SendSockfd,stStream.pstPack[i].pu8Addr[1], stStream.pstPack[i].u32Len[1],0, (struct sockaddr*)&SendServaddr, sizeof(SendServaddr)); } } s32Ret = HI_MPI_VENC_ReleaseStream(SendVencChn, &stStream); if (HI_SUCCESS != s32Ret) { free(stStream.pstPack); stStream.pstPack = NULL; break; } free(stStream.pstPack); stStream.pstPack = NULL; } } } SAMPLE_COMM_VENC_StopGetStream(); SAMPLE_COMM_VENC_UnBindVpss(SendVencGrp, VpssGrp, VpssChn); SAMPLE_COMM_VENC_Stop(SendVencGrp, SendVencChn); usleep(100); } }