DM6437视频处理子系统VPSS详解

5星 · 超过95%的资源 需积分: 50 21 下载量 183 浏览量 更新于2024-09-11 1 收藏 19KB DOCX 举报
"本文主要介绍了视频处理子系统(VPSS),特别是针对DM6437芯片的VPSS设计。VPSS包含VPFE(Video Front End)和VPBE(Video Back End)两个主要部分,用于处理从图像传感器到显示设备的视频流。VPSS通过一系列寄存器进行控制,如PID、PCR等,提供了丰富的图像处理功能,如CCDC、Preview Engine、Resizer、Hardware 3A以及Histogram模块,以确保高质量的视频输出。" 在DM6437的VPSS中,VPFE是视频处理流程的起点,它由多个关键模块构成: 1. **CCDC(CCD控制器)**:该模块负责接收来自CMOS或CCD图像传感器的数据,或者处理来自视频解码器的YUV数据。CCDC支持多种Bayer格式,并能生成必要的时序信号,如HD/VD。此外,它还支持REC656/CCIR-656标准,可处理8-或16-bit的YCbCr4:2:2格式,具备快门控制和数字钳位及黑电平补偿功能。 2. **Preview Engine**:这是一个可配置的硬件图像处理单元,主要用于将Bayer格式的原始彩色数据转换成YUV422格式,为预览和进一步处理做好准备。 3. **Resizer**:此模块用于调整输入图像的分辨率,以匹配显示设备或编码器的要求,适应不同的播放和显示需求。 4. **Hardware 3A (H3A)**:H3A模块包含了AutoFocus (AF)、AutoWhiteBalance (AWB) 和 AutoExposure (AE) 功能,通过对像素数据的统计分析来自动优化图像的对焦、白平衡和曝光,确保图像质量。 5. **Histogram blocks**:直方图模块处理像素数据,生成统计信息,为H3A提供数据支持,以实现平滑的图像效果。 VPSS的寄存器,如CCDC、PREV、RESZ、HIST、H3A和VPSS Shared Buffer Logic Reg,用于控制和配置这些模块的工作方式,以适应不同的应用场景。 VPBE(Video Back End)虽然在提供的信息中没有详细描述,但通常会包含色彩空间转换、视频编码和输出到显示设备的功能,如analog SDTV显示器、数字LCD面板或HDTV视频编码器。 DM6437的VPSS是一个强大的视频处理系统,能够处理从图像捕获到最终显示的全过程,提供了高级的图像处理功能,包括自动对焦、白平衡和曝光控制,确保了视频处理的灵活性和高质量。

td_s32 ret; ot_vpss_grp_attr grp_attr = { 0 }; ot_vpss_chn_attr chn_attr[OT_VPSS_MAX_PHYS_CHN_NUM] = { 0 }; td_bool chn_enable[OT_VPSS_MAX_PHYS_CHN_NUM] = { 0 }; if (vpss_chn >= OT_VPSS_MAX_PHYS_CHN_NUM) { sample_print("vpss_chn:%d invalid!\n", vpss_chn); return TD_FAILURE; } grp_attr.nr_en = TD_TRUE; grp_attr.ie_en = TD_TRUE; grp_attr.dci_en = TD_TRUE; grp_attr.nr_attr.compress_mode = OT_COMPRESS_MODE_FRAME; grp_attr.dei_mode = OT_VPSS_DEI_MODE_OFF; grp_attr.pixel_format = SAMPLE_PIXEL_FORMAT; grp_attr.frame_rate.src_frame_rate = -1; grp_attr.frame_rate.dst_frame_rate = -1; grp_attr.max_width = size->width; grp_attr.max_height = size->height; chn_enable[vpss_chn] = TD_TRUE; chn_attr[vpss_chn].chn_mode = OT_VPSS_CHN_MODE_AUTO; chn_attr[vpss_chn].width = size->width; chn_attr[vpss_chn].height = size->height; chn_attr[vpss_chn].pixel_format = OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420; chn_attr[vpss_chn].frame_rate.src_frame_rate = -1; chn_attr[vpss_chn].frame_rate.dst_frame_rate = -1; chn_attr[vpss_chn].border_en = TD_TRUE; chn_attr[vpss_chn].border_attr.color = COLOR_RGB_BLUE; chn_attr[vpss_chn].border_attr.top_width = 2; /* 2 : border top width */ chn_attr[vpss_chn].border_attr.bottom_width = 2; /* 2 : border bottom width */ chn_attr[vpss_chn].border_attr.left_width = 2; /* 2 : border left width */ chn_attr[vpss_chn].border_attr.right_width = 2; /* 2 : border right width */ ret = sample_common_vpss_start(vpss_grp, chn_enable, &grp_attr, chn_attr, OT_VPSS_MAX_PHYS_CHN_NUM); if (ret != TD_SUCCESS) { sample_print("failed with %#x!\n", ret); return TD_FAILURE; } return TD_SUCCESS;

2023-05-17 上传