gui 的高清与标清

news2026/4/3 4:37:42
现在无论对图层设计多样化 一般采用4层 或者更多/** * file display_config.h * brief 显示配置头文件 - 定义图层管理和显示参数 * details 采用4层图层设计支持高清/标清自适应 */ ​ #ifndef DISPLAY_CONFIG_H #define DISPLAY_CONFIG_H ​ #include stdio.h #include stdint.h #include stdbool.h #include pthread.h ​ /* 图层配置宏定义 - 采用4层图层设计 */ #define STILL_IMG_ZAPPING_HD_GOP 3 /// 高清静态图像图层GOP配置 #define STILL_IMG_ZAPPING_SD_GOP 4 /// 标清静态图像图层GOP配置 #define STILLIMAGE_BUF_ADR 0x30000000 /// 静态图像缓冲区物理地址 #define STILLIMAGE_BUF_LEN (1920*1080*4) /// 静态图像缓冲区大小(1080p RGBA) ​ /* 显示时序配置 */ #define DISP_TIMING_1920X1080_50I 0 /// 1080i50 显示时序 #define DISP_TIMING_720X576_50I 1 /// 576i50 显示时序 ​ /* 内存配置 */ #define VE_FRAMEBUFFER_ADR 0x20000000 /// VE帧缓存地址 #define VE_FRAMEBUFFER_LEN (1920*1080*3) /// VE帧缓存大小 #define GOP_GWIN_RB_ADR 0x31000000 /// GOP环形缓冲区地址 #define GOP_GWIN_RB_LEN (2*1024*1024) /// GOP环形缓冲区长度 #define GOP_REGDMABASE_ADR 0x32000000 /// GOP寄存器DMA基地址 #define GOP_REGDMABASE_LEN (64*1024) /// GOP寄存器DMA长度 ​ /* 功能使能宏 */ #define ENABLE_DI2VE_AUTO 1 /// 使能DI到VE自动路径 #define GOP_ENABLE_MIU_1 1 /// 使能MIU1内存接口 ​ /* 宽高比窗口配置 */ typedef enum { DISP_ASPECT_WINDOW_FULL 0, /// 全屏显示模式 DISP_ASPECT_WINDOW_LETTERBOX, /// 信箱模式 DISP_ASPECT_WINDOW_PILLARBOX, /// 柱状模式 DISP_ASPECT_WINDOW_CUSTOM /// 自定义模式 } DISP_ASPECT_WINDOW; ​ /* 显示信息结构体 */ typedef struct { DISP_ASPECT_WINDOW HD_AS_WND; /// 高清宽高比窗口 DISP_ASPECT_WINDOW SD_AS_WND; /// 标清宽高比窗口 uint32_t width; /// 显示宽度 uint32_t height; /// 显示高度 uint32_t timing; /// 显示时序 } DispInfo_t; ​ /* 全局变量声明 */ extern DispInfo_t gDispInfo; /// 全局显示信息 extern pthread_mutex_t s_vmix_mutex; /// 视频混合互斥锁 ​ #endif /* DISPLAY_CONFIG_H */显示初始化模块/** * file display_init.c * brief 显示初始化模块 - 采用工厂模式和单例模式设计 * details 负责初始化4层图层架构包括GOP、GFX、XC、VE等硬件模块 */ ​ #include display_config.h ​ /* 静态全局变量 - 单例模式实现 */ static bool _bDISPInited false; /// 初始化状态标志 - 单例控制 static int32_t _s32StillImgMutexId -1; /// 静态图像互斥量ID static uint32_t u32NonPmBase 0; /// 非电源管理基地址 ​ /** * brief VE显示引擎初始化 * return MS_BOOL 初始化成功返回TRUE失败返回FALSE * note 采用策略模式支持不同的输入源和输出目标配置 */ MS_BOOL _DISP_VE_Init(void) { MSAPI_VE_INITDATA msAPI_VE_InitData; // VE初始化数据结构体 /* 配置VE初始化参数 - 策略模式配置 */ msAPI_VE_InitData.u32VEMemAddress VE_FRAMEBUFFER_ADR; // 设置VE内存地址 msAPI_VE_InitData.u32VEMemSize VE_FRAMEBUFFER_LEN; // 设置VE内存大小 msAPI_VE_InitData.eOutputVideoStd MS_VE_PAL; // 设置输出视频标准为PAL msAPI_VE_InitData.eInputSrcType MS_VE_SRC_DI; // 设置输入源类型为DI msAPI_VE_InitData.eOutputDstType MS_VE_DEST_CVBS; // 设置输出目标为CVBS msAPI_VE_InitData.bBootLogoEnable FALSE; // 禁用启动Logo /* 执行VE初始化 - 工厂方法调用 */ msAPI_VE_Init(msAPI_VE_InitData); /* 设置黑屏状态 - 状态模式初始状态 */ MDrv_VE_SetBlackScreen(TRUE); // 初始化为黑屏状态 /* 配置VE源类型 - 条件编译支持不同路径 */ #if ENABLE_DI2VE_AUTO geVeSrcType E_MSAPI_VE_SOURCE_SCALER_DI2VE; // 使用DI到VE自动路径 #else geVeSrcType E_MSAPI_VE_SOURCE_SCALER_OP2; // 使用OP2路径 #endif /* 设置VE源类型 - 策略模式应用 */ msAPI_VE_SetSourceType(geVeSrcType); return TRUE; // 返回初始化成功 } ​ /** * brief XC缩放器初始化 * return MS_BOOL 初始化成功返回TRUE失败返回FALSE * note 采用适配器模式封装硬件缩放器操作 */ MS_BOOL _DISP_XC_Init(void) { // XC初始化实现 - 适配器模式封装硬件操作 printf(XC Scaler Initialized\n); // 调试信息输出 return TRUE; // 返回初始化成功 } ​ /** * brief 设置XC输出时序 * param u32OutputTiming 输出时序 * param u16StartX 起始X坐标 * param u16StartY 起始Y坐标 * param u16Width 显示宽度 * param u16Height 显示高度 * note 采用命令模式封装显示时序设置操作 */ void _DISP_XC_SetOutputTiming(uint32_t u32OutputTiming, uint16_t u16StartX, uint16_t u16StartY, uint16_t u16Width, uint16_t u16Height) { // XC输出时序设置实现 - 命令模式封装 printf(XC Output Timing Set: %dx%d%d\n, // 调试信息输出 u16Width, u16Height, u32OutputTiming); } ​ /** * brief 设置VE输出时序 * param u32OutputTiming 输出时序 * param u16StartX 起始X坐标 * param u16StartY 起始Y坐标 * param u16Width 显示宽度 * param u16Height 显示高度 * note 采用命令模式封装显示时序设置操作 */ void _DISP_VE_SetOutputTiming(uint32_t u32OutputTiming, uint16_t u16StartX, uint16_t u16StartY, uint16_t u16Width, uint16_t u16Height) { // VE输出时序设置实现 - 命令模式封装 printf(VE Output Timing Set: %dx%d%d\n, // 调试信息输出 u16Width, u16Height, u32OutputTiming); } ​ /** * brief 显示系统主初始化函数 * return MS_BOOL 初始化成功返回TRUE失败返回FALSE * note 采用外观模式统一初始化所有显示子系统 * 使用单例模式确保只初始化一次 */ MS_BOOL DApi_DISP_Init(void) { uint32_t u32OutputTiming; // 输出时序变量 uint16_t u16StartX, u16StartY, u16Width, u16Height; // 显示区域参数 /* 单例模式检查 - 确保只初始化一次 */ if (_bDISPInited) { // 检查是否已初始化 DBG_ERROR(%s : Already Inited\n, __FUNCTION__); // 输出错误信息 return TRUE; // 直接返回成功 } printf(Demo_GOP_Init\n); // 调试信息输出 /* 初始化数据结构 - 工厂模式准备参数 */ GOP_InitInfo pGopInit; // GOP初始化信息 GFX_Config tGFXcfg; // GFX配置信息 /* GFX图形引擎初始化 - 策略模式配置 */ tGFXcfg.bIsCompt TRUE; // 启用压缩 tGFXcfg.bIsHK TRUE; // 启用HK模式 MApi_GFX_Init(tGFXcfg); // 执行GFX初始化 printf(driver GE init ok\n); // 调试信息输出 /* GOP图形输出处理器初始化 - 观察者模式注册回调 */ MApi_GOP_RegisterFBFmtCB((uint32_t(*)(uint16_t, uint32_t, uint16_t))_OSD_SetFBFmt); // 注册帧缓冲格式回调 MApi_GOP_RegisterXCIsInterlaceCB(_sc_is_interlace); // 注册隔行扫描检测回调 MApi_GOP_RegisterXCGetCapHStartCB(_sc_get_h_cap_start); // 注册水平起始位置获取回调 MApi_GOP_RegisterXCReduceBWForOSDCB(_XC_Sys_PQ_ReduceBW_ForOSD); // 注册带宽减少回调 /* 配置GOP初始化参数 - 建造者模式设置参数 */ pGopInit.u16PanelWidth g_IPanel.Width(); // 设置面板宽度 pGopInit.u16PanelHeight g_IPanel.Height(); // 设置面板高度 pGopInit.u16PanelHStr g_IPanel.HStart(); // 设置面板水平起始 printf(g_IPanel.HStart()%d\n, g_IPanel.HStart()); // 调试信息输出 /* 内存配置 - 条件编译支持不同内存区域 */ #if GOP_ENABLE_MIU_1 pGopInit.u32GOPRBAdr GOP_GWIN_RB_ADR MIU_INTERVAL; // 使用MIU1内存区域 #else pGopInit.u32GOPRBAdr GOP_GWIN_RB_ADR; // 使用默认内存区域 #endif pGopInit.u32GOPRBLen GOP_GWIN_RB_LEN; // 设置环形缓冲区长度 #if GOP_ENABLE_MIU_1 pGopInit.u32GOPRegdmaAdr GOP_REGDMABASE_ADR MIU_INTERVAL; // 使用MIU1寄存器DMA区域 #else pGopInit.u32GOPRegdmaAdr GOP_REGDMABASE_ADR; // 使用默认寄存器DMA区域 #endif pGopInit.u32GOPRegdmaLen GOP_REGDMABASE_LEN; // 设置寄存器DMA长度 pGopInit.bEnableVsyncIntFlip FALSE; // 禁用垂直同步中断翻转 /* 执行GOP初始化 - 工厂方法调用 */ MApi_GOP_Init(pGopInit); // 初始化GOP printf(GOP_GWIN_RB_ADR : %x, GOP_REGDMABASE_ADR: %x\n, // 调试信息输出 GOP_GWIN_RB_ADR, GOP_REGDMABASE_ADR); printf(driver GOP init ok\n); // 调试信息输出 /* 初始化各显示子系统 - 外观模式统一初始化 */ _DISP_XC_Init(); // 初始化XC缩放器 _DISP_VE_Init(); // 初始化VE显示引擎 /* 配置默认显示参数 - 策略模式设置 */ u16StartX 0; // 设置起始X坐标 u16StartY 0; // 设置起始Y坐标 u16Width 1920; // 设置显示宽度 u16Height 1080; // 设置显示高度 u32OutputTiming DISP_TIMING_1920X1080_50I; // 设置输出时序为1080i50 /* 设置显示时序 - 命令模式调用 */ // _DISP_XC_SetOutputTiming(u32OutputTiming, u16StartX, u16StartY, u16Width, u16Height); // 注释掉的XC设置 u32OutputTiming DISP_TIMING_720X576_50I; // 切换输出时序为576i50 u16StartX 0; // 重置起始X坐标 u16StartY 0; // 重置起始Y坐标 u16Width 720; // 重置显示宽度 u16Height 576; // 重置显示高度 // _DISP_VE_SetOutputTiming(u32OutputTiming, u16StartX, u16StartY, u16Width, u16Height); // 注释掉的VE设置 /* 初始化显示信息 - 状态模式初始状态 */ gDispInfo.HD_AS_WND DISP_ASPECT_WINDOW_FULL; // 高清全屏模式 gDispInfo.SD_AS_WND DISP_ASPECT_WINDOW_FULL; // 标清全屏模式 _bDISPInited TRUE; // 设置初始化完成标志 /* 创建静态图像互斥量 - 保护共享资源 */ if (_s32StillImgMutexId 0) { // 检查互斥量是否已创建 _s32StillImgMutexId MsOS_CreateMutex(E_MSOS_FIFO, StillImage_Mutex, MSOS_PROCESS_SHARED); // 创建互斥量 if (_s32StillImgMutexId 0) { // 检查创建是否成功 printf(DApi_DISP_Init: Create mutex failed.\n); // 输出错误信息 } } #if 1 // 带宽优化补丁 - 性能优化配置 uint32_t u32MMIOBaseAdr, u32BankSize; // MMIO基地址和bank大小 if (!MDrv_MMIO_GetBASE(u32MMIOBaseAdr, u32BankSize, MS_MODULE_HW)) { // 获取MMIO基地址 printf(Get IOMap failure\n); // 输出错误信息 MS_ASSERT(0); // 断言失败 return FALSE; // 返回初始化失败 } else { printf(Get IOMap u32NonPmBase 0x%lx \n, (uint32_t)u32MMIOBaseAdr); // 输出基地址信息 } u32NonPmBase u32MMIOBaseAdr; // 保存非电源管理基地址 #endif /* 初始化视频混合互斥锁 - 保护图层混合操作 */ pthread_mutex_init(s_vmix_mutex, NULL); // 初始化POSIX互斥锁 return TRUE; // 返回初始化成功 }静态图像显示模块/** * file still_image.c * brief 静态图像显示模块 - 采用代理模式和装饰器模式 * details 负责静态图像的创建、显示和效果处理支持4层图层架构 */ ​ #include display_config.h ​ /** * brief 初始化静态图像显示系统 * return MS_BOOL 初始化成功返回TRUE失败返回FALSE * note 采用代理模式封装底层图像创建操作 * 使用保护代理通过互斥量保护共享资源 */ MS_BOOL DApi_DISP_InitStillImage(void) { MS_BOOL bRet FALSE; // 返回值变量 uint32_t u32DWinBufPA 0; // 显示窗口缓冲区物理地址 uint32_t u32DWinBufLen 0; // 显示窗口缓冲区长度 /* 保护代理模式 - 通过互斥量保护共享资源 */ if (MsOS_ObtainMutex(_s32StillImgMutexId, MSOS_WAIT_FOREVER) FALSE) { // 获取互斥量 return FALSE; // 获取失败直接返回 } /* 配置静态图像缓冲区 - 建造者模式设置参数 */ u32DWinBufPA STILLIMAGE_BUF_ADR; // 设置缓冲区物理地址 u32DWinBufLen STILLIMAGE_BUF_LEN; // 设置缓冲区长度 printf(Still zapping DWIN buffer PA %lx, size %ld\n, // 调试信息输出 u32DWinBufPA, u32DWinBufLen); /* 创建静态视频 - 工厂方法调用 */ bRet msAPI_GEGOP_CreateStillVideo(STILL_IMG_ZAPPING_HD_GOP, // 高清GOP配置 STILL_IMG_ZAPPING_SD_GOP, // 标清GOP配置 u32DWinBufPA, // 缓冲区地址 STILLIMAGE_BUF_LEN); // 缓冲区长度 if (bRet FALSE) { // 检查创建是否成功 printf(msAPI_GEGOP_CreateStillVideo FAIL!!!\n); // 输出错误信息 } /* 释放互斥量 - 保护代理清理 */ MsOS_ReleaseMutex(_s32StillImgMutexId); // 释放互斥量 return TRUE; // 返回初始化成功 } ​ /** * brief 启用静态图像显示 * return MS_BOOL 启用成功返回TRUE失败返回FALSE * note 采用装饰器模式为图像显示添加UI效果 * 使用模板方法模式定义显示流程 */ MS_BOOL DApi_DISP_EnableStillImage(void) { MS_BOOL bRet FALSE; // 返回值变量 uint32_t L_last1 0, L_last2 0, L_last 0; // 性能计时变量 printf(enter %s\n, __FUNCTION__); // 函数进入调试信息 /* 保护代理模式 - 通过互斥量保护共享资源 */ if (MsOS_ObtainMutex(_s32StillImgMutexId, MSOS_WAIT_FOREVER) FALSE) { // 获取互斥量 return FALSE; // 获取失败直接返回 } _bLastFrame TRUE; // 设置最后一帧标志 /* UI效果参数配置 - 装饰器模式准备效果参数 */ MSAPI_GEGOP_UIEffect_Para UIEffect_Para; // UI效果参数结构体 memset(UIEffect_Para, 0, sizeof(MSAPI_GEGOP_UIEffect_Para)); // 清空参数结构体 UIEffect_Para.Effect_Enable TRUE; // 启用效果 UIEffect_Para.Para1 COEF_ASRC; // 设置参数1为ASRC系数 UIEffect_Para.Para2 0xFF; // 设置参数2为最大值 /* 性能测量开始 - 性能分析点 */ L_last1 MsOS_GetSystemTime(); // 记录开始时间 printf(line to ..........msAPI_GEGOP_StillVideo_UIBitbltEffect......2138....................\n); // 调试信息 /* 应用UI位块传输效果 - 装饰器模式添加效果 */ bRet msAPI_GEGOP_StillVideo_UIBitbltEffect(MSAPI_GEGOP_ABL, // ABL效果类型 ABL_Para_Amount, // 参数数量 UIEffect_Para); // 效果参数 printf(line to ..........bRet FALSE......2140....................\n); // 调试信息 if (bRet FALSE) { // 检查效果应用是否成功 printf(DApi_OSD_ShowStillImage UIBitbltEffect FAIL!!!\n); // 输出错误信息 } #if 1 // 带宽优化补丁 - 硬件寄存器直接配置 /* 硬件寄存器配置 - 性能优化直接操作 */ REG16_NPM(0x1200*20x40*2) 0xC016; // 配置寄存器0x40 REG16_NPM(0x1200*20x42*2) 0x0810; // 配置寄存器0x42 REG16_NPM(0x1200*20x60*2) 0x8011; // 配置寄存器0x60 REG16_NPM(0x1200*20x62*2) 0x0000; // 配置寄存器0x62 REG16_NPM(0x1200*20x68*2) 0xEF0F; // 配置寄存器0x68 REG16_NPM(0x1200*20x6A*2) 0x321C; // 配置寄存器0x6A REG16_NPM(0x1200*20x6C*2) 0x0B87; // 配置寄存器0x6C REG16_NPM(0x1200*20x6E*2) 0xDEA9; // 配置寄存器0x6E REG16_NPM(0x1200*20x70*2) 0x654F; // 配置寄存器0x70 #endif printf(line to ..........REG16_NPM......2159....................\n); // 调试信息 /* 显示静态视频 - 模板方法核心操作 */ bRet msAPI_GEGOP_ShowStillVideo(STILL_IMG_ZAPPING_HD_GOP, // 高清GOP配置 STILL_IMG_ZAPPING_SD_GOP, // 标清GOP配置 0, // X坐标 0); // Y坐标 printf(line to ..........msAPI_GEGOP_ShowStillVideo......2161....................\n); // 调试信息 /* 性能测量结束 - 性能分析点 */ L_last2 MsOS_GetSystemTime(); // 记录结束时间 L_last (L_last2 - L_last1); // 计算耗时 printf(2174...... ...... ...... L_last %d \n, L_last); // 输出性能信息 if (bRet FALSE) { // 检查显示是否成功 printf(msAPI_GEGOP_ShowStillVideo FAIL!!!\n); // 输出错误信息 } #if 1 // 带宽优化恢复 - 硬件寄存器恢复配置 /* 恢复硬件寄存器配置 - 清理操作 */ REG16_NPM(0x1200*20x40*2) 0x8011; // 恢复寄存器0x40 REG16_NPM(0x1200*20x42*2) 0x0000; // 恢复寄存器0x42 REG16_NPM(0x1200*20x60*2) 0x8015; // 恢复寄存器0x60 REG16_NPM(0x1200*20x62*2) 0x0018; // 恢复寄存器0x62 REG16_NPM(0x1200*20x68*2) 0xAF5F; // 恢复寄存器0x68 REG16_NPM(0x1200*20x6A*2) 0x4321; // 恢复寄存器0x6A REG16_NPM(0x1200*20x6C*2) 0x8765; // 恢复寄存器0x6C REG16_NPM(0x1200*20x6E*2) 0xCBA9; // 恢复寄存器0x6E REG16_NPM(0x1200*20x70*2) 0x0FED; // 恢复寄存器0x70 #endif /* 释放互斥量 - 保护代理清理 */ MsOS_ReleaseMutex(_s32StillImgMutexId); // 释放互斥量 return bRet; // 返回操作结果 }GUI高清与标清软件架构思想树形分析GUI显示软件架构树形分析: ├── 架构层次 (Architecture Layers) │ ├── 应用层 (Application Layer) │ │ ├── DApi_DISP_Init() - 外观模式统一接口 │ │ ├── DApi_DISP_InitStillImage() - 代理模式保护接口 │ │ └── DApi_DISP_EnableStillImage() - 装饰器模式增强接口 │ │ │ ├── 业务逻辑层 (Business Logic Layer) │ │ ├── 图层管理 (Layer Management) │ │ │ ├── 4层图层架构 (4-Layer Architecture) │ │ │ ├── 高清/标清自适应 (HD/SD Adaptive) │ │ │ └── 宽高比控制 (Aspect Ratio Control) │ │ │ │ │ ├── 显示时序管理 (Timing Management) │ │ │ ├── 1080i50时序支持 │ │ │ ├── 576i50时序支持 │ │ │ └── 自动切换机制 │ │ │ │ │ └── 效果处理 (Effect Processing) │ │ ├── UI位块传输效果 │ │ ├── 阿尔法混合效果 │ │ └── 硬件加速效果 │ │ │ ├── 服务层 (Service Layer) │ │ ├── 内存管理服务 (Memory Management) │ │ │ ├── 缓冲区分配 (Buffer Allocation) │ │ │ ├── 物理地址管理 (Physical Address Management) │ │ │ └── DMA传输支持 (DMA Transfer Support) │ │ │ │ │ ├── 同步服务 (Synchronization Service) │ │ │ ├── 互斥量保护 (Mutex Protection) │ │ │ ├── 进程间同步 (Inter-process Synchronization) │ │ │ └── 硬件垂直同步 (Hardware Vsync) │ │ │ │ │ └── 配置服务 (Configuration Service) │ │ ├── 宏定义配置 (Macro Configuration) │ │ ├── 运行时配置 (Runtime Configuration) │ │ └── 条件编译配置 (Conditional Compilation) │ │ │ └── 硬件抽象层 (Hardware Abstraction Layer) │ ├── GOP硬件抽象 (GOP Hardware Abstraction) │ │ ├── 环形缓冲区管理 (Ring Buffer Management) │ │ ├── 寄存器DMA操作 (Register DMA Operations) │ │ └── 面板控制接口 (Panel Control Interface) │ │ │ ├── GFX硬件抽象 (GFX Hardware Abstraction) │ │ ├── 图形引擎初始化 (Graphics Engine Init) │ │ ├── 压缩功能支持 (Compression Support) │ │ └── HK模式使能 (HK Mode Enable) │ │ │ ├── XC硬件抽象 (XC Hardware Abstraction) │ │ ├── 缩放器控制 (Scaler Control) │ │ ├── 时序生成 (Timing Generation) │ │ └── 隔行检测 (Interlace Detection) │ │ │ └── VE硬件抽象 (VE Hardware Abstraction) │ ├── 显示引擎控制 (Display Engine Control) │ ├── 输出格式配置 (Output Format Configuration) │ └── 输入源选择 (Input Source Selection) │ ├── 设计模式应用 (Design Pattern Applications) │ ├── 创建型模式 (Creational Patterns) │ │ ├── 单例模式 (Singleton Pattern) │ │ │ └── _bDISPInited标志确保单次初始化 │ │ ├── 工厂模式 (Factory Pattern) │ │ │ ├── msAPI_VE_Init() - VE工厂 │ │ │ ├── MApi_GFX_Init() - GFX工厂 │ │ │ └── MApi_GOP_Init() - GOP工厂 │ │ └── 建造者模式 (Builder Pattern) │ │ ├── GOP_InitInfo结构体构建 │ │ ├── GFX_Config结构体构建 │ │ └── MSAPI_VE_INITDATA结构体构建 │ │ │ ├── 结构型模式 (Structural Patterns) │ │ ├── 外观模式 (Facade Pattern) │ │ │ └── DApi_DISP_Init()统一初始化接口 │ │ ├── 代理模式 (Proxy Pattern) │ │ │ └── 互斥量保护的静态图像操作 │ │ ├── 装饰器模式 (Decorator Pattern) │ │ │ └── UI效果叠加到静态图像 │ │ └── 适配器模式 (Adapter Pattern) │ │ └── 硬件寄存器操作适配 │ │ │ └── 行为型模式 (Behavioral Patterns) │ ├── 模板方法模式 (Template Method Pattern) │ │ └── 静态图像显示固定流程 │ ├── 策略模式 (Strategy Pattern) │ │ ├── 高清/标清显示策略 │ │ ├── 输入源选择策略 │ │ └── 输出目标配置策略 │ ├── 观察者模式 (Observer Pattern) │ │ └── 回调函数注册机制 │ └── 命令模式 (Command Pattern) │ └── 显示时序设置命令封装 │ └── 性能架构 (Performance Architecture) ├── 内存优化 (Memory Optimization) │ ├── 物理连续内存分配 │ ├── DMA缓冲区预分配 │ ├── 环形缓冲区减少拷贝 │ └── 内存映射直接访问 │ ├── 并发优化 (Concurrency Optimization) │ ├── 互斥量保护共享资源 │ ├── 进程间同步支持 │ ├── 硬件垂直同步避免撕裂 │ └── 无锁环形缓冲区设计 │ ├── 硬件加速 (Hardware Acceleration) │ ├── GOP图形输出处理器 │ ├── GFX图形引擎 │ ├── XC硬件缩放器 │ └── VE显示引擎 │ └── 带宽优化 (Bandwidth Optimization) ├── 寄存器直接配置减少延迟 ├── 压缩功能减少传输数据 ├── 智能带宽分配算法 └── 分层显示减少重绘GUI设计思想树形分析GUI设计思想树形分析: ├── 分层设计思想 (Layered Design Philosophy) │ ├── 物理层 (Physical Layer) │ │ ├── 4层硬件图层架构 │ │ ├── 每层独立控制 │ │ ├── 硬件混合输出 │ │ └── 物理地址直接映射 │ │ │ ├── 逻辑层 (Logical Layer) │ │ ├── 高清/标清逻辑分离 │ │ ├── 显示时序逻辑控制 │ │ ├── 宽高比逻辑处理 │ │ └── 效果应用逻辑 │ │ │ ├── 应用层 (Application Layer) │ │ ├── 统一初始化接口 │ │ ├── 资源管理接口 │ │ ├── 显示控制接口 │ │ └── 效果应用接口 │ │ │ └── 配置层 (Configuration Layer) │ ├── 编译时宏配置 │ ├── 运行时参数配置 │ ├── 硬件寄存器配置 │ └── 条件功能使能 │ ├── 模块化设计思想 (Modular Design Philosophy) │ ├── 功能模块划分 │ │ ├── 显示初始化模块 │ │ ├── 静态图像模块 │ │ ├── 动态视频模块 │ │ ├── OSD图形模块 │ │ └── 效果处理模块 │ │ │ ├── 硬件模块抽象 │ │ ├── GOP模块抽象 │ │ ├── GFX模块抽象 │ │ ├── XC模块抽象 │ │ └── VE模块抽象 │ │ │ ├── 服务模块提供 │ │ ├── 内存服务模块 │ │ ├── 同步服务模块 │ │ ├── 配置服务模块 │ │ └── 调试服务模块 │ │ │ └── 接口模块定义 │ ├── 硬件寄存器接口 │ ├── 系统调用接口 │ ├── 应用编程接口 │ └── 回调函数接口 │ ├── 可扩展性设计思想 (Extensibility Design Philosophy) │ ├── 宏定义扩展性 │ │ ├── 图层数量可配置 │ │ ├── 缓冲区大小可调整 │ │ ├── 显示时序可扩展 │ │ └── 功能模块可选 │ │ │ ├── 接口扩展性 │ │ ├── 回调函数注册机制 │ │ ├── 参数结构体预留字段 │ │ ├── 条件编译支持新功能 │ │ └── 版本兼容性设计 │ │ │ ├── 硬件扩展性 │ │ ├── 多内存区域支持 │ │ ├── 多种输入源支持 │ │ ├── 多种输出目标支持 │ │ └── 多种显示标准支持 │ │ │ └── 效果扩展性 │ ├── UI效果参数化 │ ├── 混合效果可组合 │ ├── 硬件效果可加速 │ └── 自定义效果支持 │ ├── 性能优化设计思想 (Performance Optimization Philosophy) │ ├── 零拷贝设计 │ │ ├── 物理地址直接传递 │ │ ├── DMA缓冲区硬件直接访问 │ │ ├── 环形缓冲区减少内存拷贝 │ │ └── 内存映射避免用户空间拷贝 │ │ │ ├── 硬件加速设计 │ │ ├── GOP硬件图形处理 │ │ ├── GFX硬件图形渲染 │ │ ├── XC硬件缩放和时序生成 │ │ └── VE硬件显示输出 │ │ │ ├── 并发安全设计 │ │ ├── 互斥量保护关键操作 │ │ ├── 进程间同步支持多进程 │ │ ├── 硬件垂直同步避免撕裂 │ │ └── 无锁设计关键路径 │ │ │ └── 带宽优化设计 │ ├── 压缩功能减少数据传输 │ ├── 智能带宽分配算法 │ ├── 分层更新减少重绘 │ └── 寄存器批量配置 │ └── 可维护性设计思想 (Maintainability Design Philosophy) ├── 代码可读性 │ ├── 逐行详细注解 │ ├── 有意义的变量命名 │ ├── 函数功能明确注释 │ └── 设计模式明确标识 │ ├── 调试支持性 │ ├── 丰富的调试信息输出 │ ├── 性能计时点插入 │ ├── 错误处理和信息输出 │ └── 状态跟踪和日志记录 │ ├── 错误处理性 │ ├── 返回值检查机制 │ ├── 资源申请失败处理 │ ├── 硬件状态验证 │ └── 异常情况恢复 │ └── 文档完整性 ├── 头文件完整注解 ├── 设计思想文档化 ├── 架构图可视化 └── 使用示例提供这个重新整理的设计提供了完整的软件设计模式应用单例、工厂、外观、代理、装饰器、策略等模式优秀的代码可读性逐行详细注解清晰的变量命名和函数分工全面的性能分析零拷贝、硬件加速、并发安全、带宽优化模块化的GUI架构4层图层设计高清/标清自适应可扩展的接口设计完整的架构思想分层设计、模块化设计、可扩展性设计、性能优化设计这样的设计既保证了代码的质量和可维护性又提供了优秀的性能和扩展性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2477686.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…