日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

海思平台OSD的实现(2)

發布時間:2024/3/12 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 海思平台OSD的实现(2) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 一、字庫字符實現OSD
    • 1、原理講解
    • 2、代碼框架分析
  • 二、字庫字符實現OSD源碼解析

一、字庫字符實現OSD

1、原理講解

??位圖填充支持兩種實現方式:其一、用戶通過HI_MPI_RGN_SetBitMap 接口將位圖數據拷貝至內部顯示畫布;其二、用戶通過 HI_MPI_RGN_GetCanvasInfo 獲取內部備份顯示畫布的地址,直接對該地址數據進行更新,然后調用HI_MPI_RGN_UpdateCanvas 接口將備份顯示畫布更新為待顯示畫布,達到實現更新位圖數據的目的。

??在上篇文章中我們使用了方式二,并且直接使用bmp圖片去顯示,在這篇文章中我們將使用方式一,我們將使用海思提供的字模庫先生成bmp圖片數據再去顯示。

??實現的功能效果為:

2、代碼框架分析

HH_OSD_Init //進行一些初始化并實現內容的顯示 HH_OSD_SetOsdPosDefault //設置osd的坐標的,使用默認的位置HH_OSD_GetOrg //獲取進行顯示位置的的坐標HH_OSD_GetColor //獲取顏色HH_OSD_GetTitle //獲取要顯示的內容HI_Create_Osd //創建一個顯示logo,實例化一個用于顯示的logo變量HI_OSD_Build //創建osd結構體,創建位圖,直接顯示HI_OSD_Parse_OsdTitle //解析osd字符,更新字符相關屬性HI_OSD_Get_BmpSize //根據ip_config配置的視頻源的大小,來配置pOsdLogo中記錄的OSD的字母的寬高、x,y坐標等HI_Create_Osd_Reg //首先申請了OSD的bmp圖片的內存buf,然后調用海思的RGN API來初始化overlayHI_MPI_RGN_Create //創建osdHI_MPI_RGN_AttachToChn //將osd與venc的通道綁定HI_OSD_Create_Bitmap根據pOsdLogo記錄的OSD要顯示的內容,來生成bmp圖片數據,然后調用HI_MPI_RGN_SetBitMap將這張BMP圖片顯示到OSD中HI_OSD_CreateBMP // 用字庫來生成bmp文件的HI_MPI_RGN_SetBitMap // 真正設置osd顯示的APIHI_OSD_Set_Show //根據傳參show為true或者false來開啟或關閉OSD的顯示HI_MPI_RGN_GetDisplayAttr //獲取區域的通道顯示屬性HI_MPI_RGN_SetDisplayAttr //設置區域的通道顯示屬性 HH_OSD_All_Refresh //手動去刷新顯示的內容,實現時間的變化HH_OSD_AllTime_Refresh HH_OSD_ChnTime_Refresh HH_OSD_ChName_RefreshHH_OSD_GetLogoHandleHH_OSD_GetTitle //獲取顯示的內容HI_OSD_Parse_OsdTitle 解析osd的字符,更新字符相關屬性HI_OSD_Get_BmpSizeHI_OSD_Create_BitmapHI_OSD_CreateBMPHI_MPI_RGN_SetBitMapHH_OSD_Show_RefreshHH_OSD_GetLogoHandleHH_OSD_GetShowHI_OSD_Set_Show //根據傳參show為true或者false來開啟或關閉OSD的顯示HH_OSD_AllName_Refresh

總結:字庫字符實現OSD的本質原理是:先由字庫生成對應文字內容的bmp文件,然后將bmp文件顯示在osd中。

二、字庫字符實現OSD源碼解析

(1)主要文件

/*************************************************************************** FileName: hh_hz16lib.c* Description: HZ16 Matrix(漢字16點陣字庫)* Copyright(C): 2006-2008 HHDigital Inc.* Version: V 1.0* Author: ChenYG* Created: 2006-08-06* Updated: * 一行一個漢字,一共8170,我們用的32字寬,所以這里是1個字符32個字節一行 **************************************************************************/

hh_osd.c處于hh_osd_api.c的上層,從各自文件中的函數名也可以看出,hh_osd.c中的以HH_開頭,而hh_osd_api.c以HI_開頭

(2)如何在字庫中查取字模,使用漢字區位碼(區碼+位碼,構成一個x,y坐標),漢字區位碼是為每個漢字編一個唯一的代碼,以便計算機辨認、接收和處理。

/****************************************************************************** * 函數名稱: HH_OSD_DrawBitmapBit(hzPos, bitmap, fColor, bColor, bmpBuffer, fontSize) * 功能描述: 將漢字的點陣轉換為bmp寫入緩沖區 * 其他說明:使用傳入的區碼和位碼來查字模表,將查到的字模輸出到in字符串中 *******************************************************************************/ int HI_OSD_DrawBitmapBit(int x_pos, HI_U8* bitmap, HI_U16 fColor,HI_U16 bColor, HI_U16 edgeColor, HI_U8 *bmpBuffer, HI_U16 bmpWidth,HI_U16 fontSize) {int i, j;int w, h;int startTop = 0;unsigned char *pBuf = bmpBuffer;unsigned short *pData = NULL;unsigned char index;int charwidth = 2;int lineWidth = bmpWidth << 1;int hzSize = 16;int bZoom = 0;startTop = 0;if (fontSize <= 8){hzSize = 8;charwidth = 1;}else if (fontSize <= 12 || fontSize == 24){hzSize = 12;}if (fontSize == 24 || fontSize == 32){bZoom = 1;}for (i = 0; i < hzSize; i++){w = (i + x_pos) << 1;h = 0;for (j = 0; j < hzSize; j++, startTop += charwidth){index = (*(bitmap + startTop + (i>>3))) & (0x80>>(i&0x07)) ? 1: 0;//index 有0 有1//printf("\r\n === %d %d ===\r\n", h,w);pData = (unsigned short *)((unsigned char *)pBuf + h + w);if(index){if (bZoom){*pData = fColor;//fColor:文字顏色*(pData + 1) = fColor;*(pData + 2) = edgeColor; //edgeColor:文字邊緣顏色,字放大看都是有邊緣的// *(pData + 3) = edgeColor;*(pData + bmpWidth) = fColor;*(pData + bmpWidth + 1) = fColor;*(pData + bmpWidth + 2) = edgeColor;// *(pData + bmpWidth + 1) = edgeColor;}else{*pData = fColor;*(pData + 1) = edgeColor;}}h += lineWidth * (bZoom + 1);}startTop = 0;}return 0; }

本部分內容比較偏門和晦澀,只有專門去做這塊內容的人才會研究的比較深,我們做到能大致看懂框架和簡單使用即可。

注:本文章參考了《朱老師物聯網大講堂》課程筆記,并結合了自己的實際開發經歷以及網上他人的技術文章,綜合整理得到。如有侵權,聯系刪除!水平有限,歡迎各位在評論區交流。

總結

以上是生活随笔為你收集整理的海思平台OSD的实现(2)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。