嵌入式 hi3518平台多路码流添加osd

简介: [html] view plain copy           /******************************************************************************   function : overlay pro...
[html]  view plain  copy
 
 在CODE上查看代码片派生到我的代码片
  1. <span style="font-family:Courier New;">  
  2.   
  3. /******************************************************************************  
  4. function : overlay process  
  5. 1) create some overlay regions  
  6. 2) display overlay regions ( One Region -- Multi-VencGroup )  
  7. 3) change all vencGroups Regions' positio  
  8. 4) change all vencGroups Regions' Layern  
  9. 5) change all vencGroups Regions' color  
  10. 6) load bmp form bmp-file to Region-0  
  11. 7) change all vencGroups Regions' front alpha  
  12. 8) change all vencGroups Regions' backgroud alpha  
  13. 9) update bitmap(not support now)  
  14. 10) show or hide overlay regions  
  15. 11) Detach overlay regions from chn  
  16. 12) Detroy overlay regions  
  17.  ******************************************************************************/  
  18. HI_S32 JOSEPH_SAMPLE_RGN_OverlayProcess(void)  
  19. {  
  20.     HI_S32 s32Ret = HI_FAILURE;  
  21.     RGN_HANDLE RgnHandle;  
  22.     RGN_ATTR_S stRgnAttr;  
  23.     MPP_CHN_S stChn;  
  24.     VENC_GRP VencGrp;  
  25.     RGN_CHN_ATTR_S stChnAttr;  
  26.     HI_U32 Joseph_u32Layer = 7;  
  27.     HI_U32 Joseph_bind_DevId = 0;   
  28.     int last_sec = 0;  
  29.       
  30.     /****************************************  
  31.       step 1: create overlay regions  
  32.      ****************************************/  
  33.     stRgnAttr.enType = OVERLAY_RGN;  
  34.     stRgnAttr.unAttr.stOverlay.enPixelFmt = PIXEL_FORMAT_RGB_1555;//PIXEL_FORMAT_RGB_565   
  35.     stRgnAttr.unAttr.stOverlay.stSize.u32Width  = 288;  
  36.     stRgnAttr.unAttr.stOverlay.stSize.u32Height = 128;  
  37.     stRgnAttr.unAttr.stOverlay.u32BgColor = 0xffffff;  
  38.   
  39.     RgnHandle = 0;  
  40.   
  41.     s32Ret = HI_MPI_RGN_Create(RgnHandle, &stRgnAttr);  
  42.     if(HI_SUCCESS != s32Ret)  
  43.     {  
  44.         SAMPLE_PRT("HI_MPI_RGN_Create (%d) failed with %#x!\n", \  
  45.             RgnHandle, s32Ret);  
  46.         return HI_FAILURE;  
  47.     }  
  48.     SAMPLE_PRT("the handle:%d,creat success!\n",RgnHandle);  
  49.   
  50.   
  51.     /*********************************************  
  52.       step 2: display overlay regions to venc groups  
  53.      *********************************************/  
  54.       
  55.     for(Joseph_bind_DevId = 0; Joseph_bind_DevId joseph_ipnc_param.joseph_s32ChnNum; Joseph_bind_DevId++)  
  56.     {  
  57.           
  58.         VencGrp = 0;  
  59.         stChn.enModId = HI_ID_GROUP;  
  60.         stChn.s32DevId = Joseph_bind_DevId;  
  61.         stChn.s32ChnId = VencGrp;  
  62.         RgnHandle = 0;  
  63.           
  64.         printf("%s:[%d] stChn.s32ChnId is %d ,\n",__FUNCTION__,__LINE__,stChn.s32ChnId);  
  65.           
  66.         memset(&stChnAttr,0,sizeof(stChnAttr));  
  67.         stChnAttr.bShow = HI_TRUE;  
  68.         stChnAttr.enType = OVERLAY_RGN;  
  69.   
  70.         stChnAttr.unChnAttr.stOverlayChn.stPoint.s32X = 16;  
  71.         stChnAttr.unChnAttr.stOverlayChn.stPoint.s32Y = 32;  
  72.         stChnAttr.unChnAttr.stOverlayChn.u32BgAlpha = 128;  
  73.         stChnAttr.unChnAttr.stOverlayChn.u32FgAlpha = 0;  
  74.         stChnAttr.unChnAttr.stOverlayChn.u32Layer = Joseph_u32Layer--;  
  75.           
  76.         stChnAttr.unChnAttr.stOverlayChn.stQpInfo.bAbsQp = HI_FALSE;  
  77.         stChnAttr.unChnAttr.stOverlayChn.stQpInfo.s32Qp  = 0;  
  78.   
  79.         stChnAttr.unChnAttr.stOverlayChn.stInvertColor.stInvColArea.u32Height = 32;  
  80.         stChnAttr.unChnAttr.stOverlayChn.stInvertColor.stInvColArea.u32Width = 16;  
  81.         stChnAttr.unChnAttr.stOverlayChn.stInvertColor.u32LumThresh = 64;  
  82.         stChnAttr.unChnAttr.stOverlayChn.stInvertColor.bInvColEn = HI_TRUE;  
  83.         stChnAttr.unChnAttr.stOverlayChn.stInvertColor.enChgMod = LESSTHAN_LUM_THRESH;  
  84.   
  85.         s32Ret = HI_MPI_RGN_AttachToChn(RgnHandle, &stChn, &stChnAttr);  
  86.         if(HI_SUCCESS != s32Ret)  
  87.         {  
  88.             SAMPLE_PRT("HI_MPI_RGN_AttachToChn (%d) failed with %#x!\n",\  
  89.                 RgnHandle, s32Ret);  
  90.             return HI_FAILURE;  
  91.         }  
  92.         printf("display region to s32DevId %d chn success!\n",stChn.s32DevId);  
  93.     }  
  94.           
  95.   
  96.     /*********************************************  
  97.       step 3: show bitmap  
  98.      *********************************************/  
  99.     struct tm *tmnow;  
  100.     struct timeval tv;  
  101.     BITMAP_S Joseph_Osd_Bmp;  
  102.     gettimeofday(&tv,NULL);  
  103.   
  104.     setlocale(LC_ALL,"zh_CN.UTF-8");  
  105.     char osd_content[256] = {0};  
  106.     char week_chinese[16] = {0};  
  107.       
  108.     tmnow = localtime(&tv.tv_sec);  
  109.   
  110.     TTF_Font *font;   
  111.     /* Initialize the TTF library */    
  112.     if ( TTF_Init() 0 ) {    
  113.         return -1;    
  114.     }  
  115.       
  116.     font = TTF_OpenFont(JOSEPH_FONT_FILE, JOSEPH_FONT_SIZE);    
  117.     if ( font == NULL ) {    
  118.         printf("%s %d The fonts is NULL !\n",__FUNCTION__,__LINE__);  
  119.         return -1;  
  120.     }  
  121.       
  122.     /*TTF_SetFontStyle(font,  TTF_STYLE_ITALIC);*/   
  123.       
  124.     while(1)  
  125.     {  
  126.         memset(osd_content,0,sizeof(osd_content));  
  127.         memset(week_chinese,0,sizeof(week_chinese));  
  128.   
  129.         while(1)  
  130.         {  
  131.             gettimeofday(&tv,NULL);  
  132.             if(tv.tv_sec != last_sec)  
  133.             {  
  134.                 last_sec = tv.tv_sec;  
  135.                 break;  
  136.             }  
  137.             usleep(20000);  
  138.         }  
  139.   
  140.         tmnow = localtime(&tv.tv_sec);  
  141.           
  142.         #if 0  
  143.           
  144.         sprintf(osd_content,"%04d-%02d-%02d %02d:%02d:%02d %s ",\  
  145.             tmnow->tm_year+1900, tmnow->tm_mon+1, tmnow->tm_mday,tmnow->tm_hour,\  
  146.             tmnow->tm_min, tmnow->tm_sec,Joseph_utf_weeky_show(tmnow->tm_wday,week_chinese));  
  147.         #else  
  148.           
  149.         sprintf(osd_content,"%04d-%02d-%02d %s %02d:%02d:%02d",\  
  150.             tmnow->tm_year+1900, tmnow->tm_mon+1, tmnow->tm_mday, Joseph_utf_weeky_show(tmnow->tm_wday,week_chinese),\  
  151.             tmnow->tm_hour,tmnow->tm_min, tmnow->tm_sec);  
  152. #if 0  
  153.         printf("%s:[%d] The time stamp is %s ... \n",__FUNCTION__,__LINE__,osd_content);  
  154. #endif  
  155.         joseph_get_luminance_from_sensor_test();  
  156.         #endif  
  157.   
  158.         #if 0  
  159.           
  160.         joseph_creat_bmp_data(font,osd_content);  
  161.         #else  
  162.   
  163.         joseph_creat_bmp_data_show(font,osd_content,&Joseph_Osd_Bmp);  
  164.         #endif  
  165.         for(RgnHandle = 0;RgnHandle 1;RgnHandle++)  
  166.         {  
  167.             #if 0  
  168.             s32Ret = HI_MPI_RGN_SetBitMap(RgnHandle,&stBitmap);  
  169.             #else  
  170.             s32Ret = HI_MPI_RGN_SetBitMap(RgnHandle,&Joseph_Osd_Bmp);  
  171.             #endif  
  172.             if(s32Ret != HI_SUCCESS)  
  173.             {  
  174.                 SAMPLE_PRT("HI_MPI_RGN_SetBitMap failed with %#x!\n", s32Ret);  
  175.                 exit(0);  
  176.                 return HI_FAILURE;  
  177.             }  
  178.           
  179.             free(Joseph_Osd_Bmp.pData);               
  180.             Joseph_Osd_Bmp.pData = NULL;  
  181.                   
  182.         }  
  183.   
  184.     }  
  185.      
  186.     TTF_CloseFont(font);  
  187.     font = NULL;  
  188.     TTF_Quit();   
  189.       
  190. #if 1  
  191.     /*********************************************  
  192.       step 4: destory region  
  193.      *********************************************/  
  194.   
  195.     for(Joseph_bind_DevId = 0; Joseph_bind_DevId joseph_ipnc_param.joseph_s32ChnNum; Joseph_bind_DevId++)  
  196.     {  
  197.         RgnHandle = 0;  
  198.         VencGrp = 0;  
  199.         stChn.enModId = HI_ID_GROUP;  
  200.         stChn.s32DevId = Joseph_bind_DevId;  
  201.         stChn.s32ChnId = VencGrp;  
  202.         RgnHandle = 0;  
  203.           
  204.   
  205.         s32Ret = HI_MPI_RGN_DetachFrmChn(RgnHandle, &stChn);  
  206.         if(HI_SUCCESS != s32Ret)  
  207.         {  
  208.             SAMPLE_PRT("HI_MPI_RGN_DetachFrmChn (%d) failed with %#x!\n",\  
  209.                    RgnHandle, s32Ret);  
  210.             return HI_FAILURE;  
  211.         }  
  212.     }  
  213.   
  214.     RgnHandle = 0;  
  215.     s32Ret = HI_MPI_RGN_Destroy(RgnHandle);  
  216.     if (HI_SUCCESS != s32Ret)  
  217.     {  
  218.         SAMPLE_PRT("HI_MPI_RGN_Destroy [%d] failed with %#x\n",\  
  219.             RgnHandle, s32Ret);  
  220.     }  
  221.     SAMPLE_PRT("destory all region success!\n");  
  222. #endif  
  223.   
  224.     return HI_SUCCESS;  
  225. }  
  226. </span>  

 

具体Demo代码可以下载:http://download.csdn.net/detail/skdkjxy/8838309 仅供参考,谢谢~

 

 

from:http://blog.csdn.net/skdkjzz/article/details/40429587

目录
相关文章
|
7月前
|
编解码 监控 开发工具
如何同时启动Android平台GB28181设备接入模块和轻量级RTSP服务模块?
为什么要设计GB28181设备接入模块?GB28181接入SDK,实现不具备国标音视频能力的 Android终端,通过平台注册接入到现有的GB/T28181—2016服务,可用于如智能监控、智慧零售、智慧教育、远程办公、生产运输、智慧交通、车载或执法记录仪等场景。Android终端除支持常规的音视频数据接入外,还可以支持移动设备位置(MobilePosition)订阅和通知、语音广播和语音对讲、云台控制和预置位查询等。
|
2月前
|
编解码 计算机视觉 Python
IPC机制在jetson中实现硬解码视频流数据通信的逻辑解析
IPC机制在jetson中实现硬解码视频流数据通信的逻辑解析
37 0
|
7月前
|
开发工具 Android开发
Android平台GB28181设备接入端预置位查询(PresetQuery)探讨和技术实现
之前blog介绍了GB28181云台控制(PTZCmd)相关,本文主要是介绍下GB28181预置位查询。
|
5月前
|
Web App开发 存储 Linux
Linux C/C++开发(后端/音视频/游戏/嵌入式/高性能网络/存储/基础架构/安全)(下)
Linux C/C++开发(后端/音视频/游戏/嵌入式/高性能网络/存储/基础架构/安全)
|
5月前
|
存储 Linux 调度
Linux C/C++开发(后端/音视频/游戏/嵌入式/高性能网络/存储/基础架构/安全)(上)
Linux C/C++开发(后端/音视频/游戏/嵌入式/高性能网络/存储/基础架构/安全)
|
7月前
|
编解码 Android开发
Android平台GB28181设备接入、RTMP推送模块如何实现高效率的视频编码
我们在做Android平台RTMP推送、轻量级RTSP服务和GB28181设备接入模块的时候,有一个点是逃不掉的:如何高效率的实现视频数据编码?
125 0
|
7月前
|
编解码 监控 前端开发
GB/T28181-2016传输要求和Android平台设备接入技术实现
GB/T28181-2016公共安全视频监控联网系统 信息传输、交换、控制技术要求相关的传输要求如下:
134 1
|
7月前
|
编解码 Android开发 开发者
Android平台GB28181设备接入模块如何实现实时视频和本地录像双码流编码
我们在做Android平台GB28181设备接入模块的时候,遇到这样的场景,比如执法记录仪或智慧工地等场景下,由于GB28181设备接入模块,注册到国标平台后,平时只是心跳保持,或还有实时位置订阅,查看视频的时候,是按需看,而且有时候,网络环境并不是太好,所以,催生了这样一个诉求:部分开发者希望能本地录像的时候,录制高分辨率(比如1920*1080),国标平台侧发起实时视频查看请求的时候,上传低分辨率(如1280*720)数据,有点类似于IPC的主码流和子码流。
|
网络协议 测试技术 芯片
基于ZYNQ+DSP平台Zynq7035/45 FPGA高速串行接口的千兆以太网UDP例程设计和使用说明
Xilinx XC7Z035/45-2FFG676I PL端高速串行接口的千兆以太网UDP例程设计和使用说明
基于ZYNQ+DSP平台Zynq7035/45 FPGA高速串行接口的千兆以太网UDP例程设计和使用说明
嵌入式端音频开发(Unisound篇)之 7.5 蜂鸟M音频控制
嵌入式端音频开发(Unisound篇)之 7.5 蜂鸟M音频控制
149 0