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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

设置海思的HDMI2.0自定义显示时序-Hi3536

發布時間:2023/12/29 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设置海思的HDMI2.0自定义显示时序-Hi3536 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Hi3536的SDK定義了一些常見的分辨率,諸如3840X2160@30/1920X1080@60/3840X2160@60等:

typedef enum hiVO_INTF_SYNC_E {VO_OUTPUT_PAL = 0,VO_OUTPUT_NTSC,VO_OUTPUT_960H_PAL, /* ITU-R BT.1302 960 x 576 at 50 Hz (interlaced)*/VO_OUTPUT_960H_NTSC, /* ITU-R BT.1302 960 x 480 at 60 Hz (interlaced)*/VO_OUTPUT_1080P24,VO_OUTPUT_1080P25,VO_OUTPUT_1080P30,VO_OUTPUT_720P50, VO_OUTPUT_720P60, VO_OUTPUT_1080I50,VO_OUTPUT_1080I60, VO_OUTPUT_1080P50,VO_OUTPUT_1080P60, VO_OUTPUT_576P50,VO_OUTPUT_480P60,VO_OUTPUT_640x480_60, /* VESA 640 x 480 at 60 Hz (non-interlaced) CVT */VO_OUTPUT_800x600_60, /* VESA 800 x 600 at 60 Hz (non-interlaced) */VO_OUTPUT_1024x768_60, /* VESA 1024 x 768 at 60 Hz (non-interlaced) */VO_OUTPUT_1280x1024_60, /* VESA 1280 x 1024 at 60 Hz (non-interlaced) */VO_OUTPUT_1366x768_60, /* VESA 1366 x 768 at 60 Hz (non-interlaced) */VO_OUTPUT_1440x900_60, /* VESA 1440 x 900 at 60 Hz (non-interlaced) CVT Compliant */VO_OUTPUT_1280x800_60, /* 1280*800@60Hz VGA@60Hz*/ VO_OUTPUT_1680x1050_60, /* VESA 1680 x 1050 at 60 Hz (non-interlaced) */VO_OUTPUT_1920x2160_30, /* 1920x2160_30 */VO_OUTPUT_1600x1200_60, /* VESA 1600 x 1200 at 60 Hz (non-interlaced) */VO_OUTPUT_1920x1200_60, /* VESA 1920 x 1600 at 60 Hz (non-interlaced) CVT (Reduced Blanking)*/ VO_OUTPUT_2560x1440_30, /* 2560x1440_30 */VO_OUTPUT_2560x1440_60, /* 2560x1440_60 */VO_OUTPUT_2560x1600_60, /* 2560x1600_60 */VO_OUTPUT_3840x2160_25, /* 3840x2160_25 */VO_OUTPUT_3840x2160_30, /* 3840x2160_30 */VO_OUTPUT_3840x2160_50, /* 3840x2160_50 */VO_OUTPUT_3840x2160_60, /* 3840x2160_60 */VO_OUTPUT_USER,VO_OUTPUT_BUTT } VO_INTF_SYNC_E;

但是它不一定都滿足我們的需求,譬如,給LED屏幕顯示,分辨率可能是奇怪的,那么怎么辦呢?

不用擔心,海思提供了接口供我們解決這類問題,就是VO_OUTPUT_USER,即自定義輸出時序。下面給出一個例子:

static HI_S32 SAMPLE_COMM_VO_StartDev2(VO_DEV VoDev, VO_PUB_ATTR_S *pstPubAttr, HI_S32 u32Fps) {HI_S32 s32Ret = HI_SUCCESS;s32Ret = HI_MPI_VO_SetPubAttr(VoDev, pstPubAttr);...//設置用戶時序下的設備輸出幀率(文檔要求)s32Ret = HI_MPI_VO_SetDevFrameRate(VoDev, u32Fps); //該接口只能配置為25、30、50、60...s32Ret = HI_MPI_VO_Enable(VoDev);...return s32Ret; }HI_S32 HiUsrDisplayTimingConfig(USR_DISPLAY_TIMING_S *pstTiming) {HI_S32 s32Ret = -1;VO_DEV voDev = SAMPLE_VO_DEV_DHD0;VO_LAYER voLayer = SAMPLE_VO_LAYER_VHD0;VO_PUB_ATTR_S stVoPubAttr;VO_VIDEO_LAYER_ATTR_S stVoLayerAttr;memset(&stVoPubAttr,0,sizeof(VO_PUB_ATTR_S));memset(&stVoLayerAttr,0,sizeof(VO_VIDEO_LAYER_ATTR_S));stVoPubAttr.enIntfSync = VO_OUTPUT_USER; //接口時序類型stVoPubAttr.enIntfType = VO_INTF_HDMI; //接口類型stVoPubAttr.u32BgColor = 0x000000ff; //設備背景色stVoPubAttr.stSyncInfo.bSynm = HI_FALSE; //保留字段stVoPubAttr.stSyncInfo.u8Intfb = 8; //保留字段stVoPubAttr.stSyncInfo.bIdv = HI_FALSE; //保留字段stVoPubAttr.stSyncInfo.bIop = pstTiming->bIop; //逐行或隔行掃描stVoPubAttr.stSyncInfo.u16Vact = pstTiming->u16Vact; //垂直有效區域stVoPubAttr.stSyncInfo.u16Vbb = pstTiming->u16Vbb; //垂直消隱后肩stVoPubAttr.stSyncInfo.u16Vfb = pstTiming->u16Vfb; //垂直消隱前肩stVoPubAttr.stSyncInfo.u16Hact = pstTiming->u16Hact; //水平有效區域stVoPubAttr.stSyncInfo.u16Hbb = pstTiming->u16Hbb; //水平消隱后肩stVoPubAttr.stSyncInfo.u16Hfb = pstTiming->u16Hfb; //水平消隱前肩stVoPubAttr.stSyncInfo.u16Hpw = pstTiming->u16Hpw; //水平同步寬度 stVoPubAttr.stSyncInfo.u16Vpw = pstTiming->u16Vpw; //垂直同步寬度stVoPubAttr.stSyncInfo.bIhs = pstTiming->bIhs; //hs極性stVoPubAttr.stSyncInfo.bIvs = pstTiming->bIvs; //vs極性//隔行掃描相關參數stVoPubAttr.stSyncInfo.u16Hmid = pstTiming->u16Hmid;stVoPubAttr.stSyncInfo.u16Bvact = pstTiming->u16Bvact;stVoPubAttr.stSyncInfo.u16Bvbb = pstTiming->u16Bvbb;stVoPubAttr.stSyncInfo.u16Bvfb = pstTiming->u16Bvfb;s32Ret = SAMPLE_COMM_VO_StartDev2(voDev, &stVoPubAttr, pstTiming->u32Fps);//根據像素時鐘,設置vpll0寄存器的參數SetVpll0(pstTiming->u32PixelClock);s32Ret = SAMPLE_COMM_VO_HdmiStart(VO_OUTPUT_3840x2160_30); //使用VO_OUTPUT_3840x2160_30做個樣子即可...stVoLayerAttr.bClusterMode = HI_FALSE;stVoLayerAttr.bDoubleFrame = HI_FALSE;stVoLayerAttr.enPixFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_420;stVoLayerAttr.stDispRect.u32Width = pstTiming->u16Hact;stVoLayerAttr.stDispRect.u32Height = pstTiming->u16Vact;stVoLayerAttr.u32DispFrmRt = pstTiming->u32Fps;stVoLayerAttr.stImageSize.u32Width = stVoLayerAttr.stDispRect.u32Width ;stVoLayerAttr.stImageSize.u32Height = stVoLayerAttr.stDispRect.u32Height ;s32Ret = SAMPLE_COMM_VO_StartLayer(voLayer, &stVoLayerAttr);...s32Ret = SAMPLE_COMM_VO_StartChn(voLayer, VO_MODE_1MUX);return s32Ret; }//使用參考: USR_DISPLAY_TIMING_S stTiming[] = {[0] = {.u32Fps = 60 , //幀率,只能配置為25、30、50、60.u32PixelClock = 101000 , //像素時鐘101MHz(REDUCED BLANKING) .bIop = 1 , //逐行掃描.u16Vact = 1050 , //垂直有效區域.u16Vbb = 23 , //垂直消隱后肩.u16Vfb = 3 , //垂直消隱前肩.u16Hact = 1400 , //水平有效區域.u16Hbb = 80 , //水平消隱后肩.u16Hfb = 48 , //水平消隱前肩.u16Hpw = 32 , //水平同步寬度.u16Vpw = 4 , //垂直同步寬度.bIhs = 0 , //hs極性 0為高有效,1為低有效.bIvs = 1 , //vs極性 0為高有效,1為低有效},[1] = {.u32Fps = 60 , //幀率,只能配置為25、30、50、60.u32PixelClock = 148500 , //像素時鐘148.5MHz.bIop = 1 , //逐行掃描.u16Vact = 1080 , //垂直有效區域.u16Vbb = 36 , //垂直消隱后肩.u16Vfb = 4 , //垂直消隱前肩.u16Hact = 1920 , //水平有效區域.u16Hbb = 148 , //水平消隱后肩.u16Hfb = 88 , //水平消隱前肩.u16Hpw = 44 , //水平同步寬度.u16Vpw = 5 , //垂直同步寬度.bIhs = 0 , //hs極性 0為高有效,1為低有效.bIvs = 0 , //vs極性 0為高有效,1為低有效},// ...//... };USR_DISPLAY_TIMING_S *pstTiming = &stTiming[1];HiUsrDisplayTimingConfig(pstTiming);

上面的代碼完全就是按照海思SDK里01.software/board/document_cn/《HiMPP V3.0 媒體處理軟件 FAQ.pdf》文檔的”3.6 如何設置VO的用戶時序“章節的描述寫出來的,包括各參數意義說明、vpll0配置方法以及VO幀率設置,我并沒有創新之處!

Vpll0的配置參考文章《https://blog.csdn.net/litao31415/article/details/107326413》,

以及SDK提及的:


————————————————
本文參考:https://blog.csdn.net/litao31415/article/details/107331501,如有侵權請聯系小編,小編會第一時間刪除

總結

以上是生活随笔為你收集整理的设置海思的HDMI2.0自定义显示时序-Hi3536的全部內容,希望文章能夠幫你解決所遇到的問題。

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