Hi3516的venc编码模块处理流程

Hisi 专栏收录该内容
23 篇文章 2 订阅

以下处理流程为自己根据Hi3516av200的VENC 模块的整理,梳理了整个处理流程。

main

SAMPLE_VENC_NORMALP_CLASSIC

//	

/******************************************
step  1: init sys variable 
******************************************/
SAMPLE_COMM_VI_GetSizeBySensor
SAMPLE_COMM_SYS_CalcPicVbBlkSize
SAMPLE_COMM_SYS_GetPicSize



/******************************************
step 2: mpp system init. 
******************************************/

SAMPLE_COMM_SYS_Init

HI_MPI_SYS_Exit();			//去初始化MPP 系统
HI_MPI_VB_Exit();			//去初始化MPP 视频缓存池
HI_MPI_VB_SetConf
//设置MPP 视频缓存池属性
HI_MPI_VB_Init				//初始化MPP 视频缓存池
HI_MPI_SYS_SetConf			//配置系统控制参数
HI_MPI_SYS_Init				//初始化MPP 系统

//


/******************************************
step 3: start vi dev & chn to capture
******************************************/
SAMPLE_COMM_VI_StartVi
IsSensorInput   //判断是传统的还是现在的sensor
SAMPLE_COMM_VI_StartIspAndVi

/******************************************
step 1: mipi configure
******************************************/
SAMPLE_COMM_VI_StartMIPI
SAMPLE_COMM_VI_SetMipiAttr  //操作sensor,对sensor做必要的初始化

fd = open("/dev/hi_mipi", O_RDWR);

/* 1.reset mipi */
ioctl(fd, HI_MIPI_RESET_MIPI, &stcomboDevAttr.devno);

/* 2.reset sensor */
ioctl(fd, HI_MIPI_RESET_SENSOR, &stcomboDevAttr.devno);

/* 3.set mipi attr */
if (ioctl(fd, HI_MIPI_SET_DEV_ATTR, &stcomboDevAttr))

/* 4.unreset mipi */
ioctl(fd, HI_MIPI_UNRESET_MIPI, &stcomboDevAttr.devno);

/* 5.unreset sensor */
ioctl(fd, HI_MIPI_UNRESET_SENSOR, &stcomboDevAttr.devno);

/******************************************
step 2: configure sensor and ISP (include WDR mode).
note: you can jump over this step, if you do not use Hi3516A interal isp.
******************************************/
SAMPLE_COMM_ISP_Sensor_Regiter_callback  //注册sensor回调
SAMPLE_COMM_ISP_Init                    // 对ISP初始化
  HI_MPI_ISP_MemInit               //对ISP分配必要的内存
  HI_MPI_ISP_SetWDRMode           //设置宽动态模式
  GetIspPubAttrBySns
  HI_MPI_ISP_SetPubAttr           //写入ISP单元内部,将来ISP会根据设置的参数进行图像处理
  HI_MPI_ISP_Init                 //ISP 系统初始化
  
/******************************************
step 3: run isp thread
note: you can jump over this step, if you do not use Hi3516A interal isp.
******************************************/
SAMPLE_COMM_ISP_Run
  SAMPLE_COMM_ISP_Run
  SAMPLE_COMM_ISP_Run
          HI_MPI_ISP_Run
          

/******************************************************
step 4 : config & start vicap dev
******************************************************/
SAMPLE_COMM_VI_StartDev
  SAMPLE_COMM_VI_GetDevAttrBySns
  HI_MPI_ISP_GetWDRMode
  HI_MPI_VI_SetDevAttr
  HI_MPI_VI_SetWDRAttr
  HI_MPI_VI_EnableDev
  

/******************************************************
* Step 5: config & start vicap chn (max 1)
******************************************************/
GetViCaprectBySns
SAMPLE_COMM_VI_StartChn
  HI_MPI_VI_EnableChn

/
    
/******************************************
step 4: start vpss and vi bind vpss
******************************************/

  SAMPLE_COMM_SYS_GetPicSize
  SAMPLE_COMM_VPSS_StartGroup
          HI_MPI_VPSS_CreateGrp
          HI_MPI_VPSS_StartGrp
  SAMPLE_COMM_VI_BindVpss
          SAMPLE_COMM_VI_Mode2Param
          HI_MPI_SYS_Bind
  SAMPLE_COMM_VPSS_EnableChn
          HI_MPI_VPSS_SetChnAttr
          HI_MPI_VPSS_SetChnMode
          HI_MPI_VPSS_EnableChn

            

/******************************************
step 5: start stream venc
******************************************/

  SAMPLE_COMM_VENC_GetGopAttr
  SAMPLE_COMM_VENC_Start
          SAMPLE_COMM_SYS_GetPicSize
          
          /******************************************
           step 1:  Create Venc Channel
          ******************************************/
          HI_MPI_VENC_CreateChn
          
          /******************************************
           step 2:  Start Recv Venc Pictures
          ******************************************/
          HI_MPI_VENC_StartRecvPic //开启编码通道接收输入图像
          
  SAMPLE_COMM_VENC_BindVpss
          HI_MPI_SYS_Bind  //数据源到数据接收者绑定接口

//  

/******************************************
step 6: stream venc process -- get stream, then save it to file. 
******************************************/
          SAMPLE_COMM_VENC_StartGetStream
                  SAMPLE_COMM_VENC_GetVencStreamProc
                          
/******************************************
step 1:  check & prepare save-file & venc-fd
******************************************/
HI_MPI_VENC_GetChnAttr
SAMPLE_COMM_VENC_GetFilePostfix
fopen(aszFileName[i], "wb");
HI_MPI_VENC_GetFd
HI_MPI_VENC_GetStreamBufInfo

/******************************************
step 2:  Start to get streams of each channel.
******************************************/

select(maxfd + 1, &read_fds, NULL, NULL, &TimeoutVal);
   /*******************************************************
    step 2.1 : query how many packs in one-frame stream.
   *******************************************************/
           HI_MPI_VENC_Query
           
   /*******************************************************
   step 2.2 :suggest to check both u32CurPacks and u32LeftStreamFrames at the same time,for example:
    *******************************************************/

   
   /*******************************************************
    step 2.3 : malloc corresponding number of pack nodes.
   *******************************************************/

   
   /*******************************************************
    step 2.4 : call mpi to get one-frame stream
   *******************************************************/
       HI_MPI_VENC_GetStream
       
   /*******************************************************
    step 2.5 : save frame to file
   *******************************************************/
       SAMPLE_COMM_VENC_SaveFile  
               
               fwrite ((void *)u32SrcPhyAddr, pstStream->pstPack[i].u32Len - pstStream->pstPack[i].u32Offset, 1, pFd);
               fflush(pFd);
               
   /*******************************************************
   step 2.6 : release stream                    
   *******************************************************/
       HI_MPI_VENC_ReleaseStream
       
   /*******************************************************
    step 2.7 : free pack nodes
   *******************************************************/
       
       free(stStream.pstPack);
   
/*******************************************************
* step 3 : close save-file
*******************************************************/
fclose(pFile[i]);

  

/******************************************
step 7: exit process
******************************************/
          SAMPLE_COMM_VENC_StopGetStream
                  pthread_join



                                            

  • 0
    点赞
  • 0
    评论
  • 2
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

zxy131072

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值