已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
DM642学习笔记(程序注释)【整理者】61【提供者】trrt49【详细说明】DM642学习笔记(程序注释)张伟刚 QQ:263298490 2010年11月初DM642学习笔记用的是瑞泰创新的实验箱(ICETEK-DM642-IDK-M),主要是视频处理部分的程序注释及思考题思路及一些不成熟的见解实验5.6-5.19 视频驱动程序应用DM642视频驱动程序的注释:/* Copyright 2003 by Texas Instruments Incorporated.* All rights reserved. Property of Texas Instruments Incorporated.* Restricted rights to use, duplicate or disclose this code are* granted through contract.* */* (#) DDK 1.10.00.23 07-02-03 (ddk-b12) */#include /如果使用C语言,必须将此文件作为第一个头文件#include #include #include #include #include /使用CSL库,要用到的一些头文件,可参考CSL#include /视频驱动头文件#include #include #include #include #include #include #include /芯片头文件#include colorbar.h/如果显示彩色滚动条,就必须有此头文件;否则不需要#include evmdm642_vcapparams.h#include evmdm642_vdisparams.h /* heap IDs defined in the BIOS configuration file */extern Int EXTERNALHEAP;/?DSP/BIOS?/* = main =*/main()/*/* open CSL DAT module for fast copy */*/CSL_init(); /调用任何CSL库中的函数,必须先在此调用函数CACHE_clean(CACHE_L2ALL, 0, 0); /清洗Cache模式CACHE_setL2Mode(CACHE_256KCACHE); /设置Cache模式CACHE_enableCaching(CACHE_EMIFA_CE00); /使能EMIFA CE0空间CACHE_enableCaching(CACHE_EMIFA_CE01); /使能EMIFA CE1空间DAT_open(DAT_CHAANY, DAT_PRI_LOW, DAT_OPEN_2D); /打开数据传输/* = tskVideoLoopback =* video loopback function.*/void tskVideoLoopback()Int i;int m_nWork;Int status;FVID_Handle disChan; /设置设备句柄Int frames = 0;FVID_Frame *disFrameBuf; Int numLinesDis = EVMDM642_vDisParamsChan.imgVSizeFld1;/设置显示的行数,VGA为480,PAL为576Int numLinesCap =EVMDM642_vCapParamsChan.fldYStop1 - /设置采集行数EVMDM642_vCapParamsChan.fldYStrt1+1;/*判断是显示区域大,还是采集区域大,取其小者*/Int numLines = (numLinesDis numLinesCap) ? numLinesCap : numLinesDis;#ifdef _LOOPBACKFVID_Handle capChan; /*设置每行显示的像素数,PAL制为720*/Int numPixels = EVMDM642_vCapParamsChan.fldXStop1 - EVMDM642_vCapParamsChan.fldXStrt1+1;FVID_Frame *capFrameBuf;/*设置采集图像一行的总像素*/Int capLinePitch = EVMDM642_vCapParamsChan.fldXStop1 - EVMDM642_vCapParamsChan.fldXStrt1+1;/*设置显示图像一行的总像素*/ Int disLinePitch = EVMDM642_vDisParamsChan.imgHSizeFld1;#ifdef _PIPVPORTCAP_Params EVMDM642_vCapParamsChan2 = EVMDM642_vCapParamsChan;FVID_Handle capChan2; FVID_Frame *capFrameBuf2;Int yPitch = capLinePitch 1;Int cPitch = (capLinePitch 2) + 7) & ( 7);#endif#endif numLines *= 2; /* both fields */如果输出为PAL制,前面numLinesCap不要*2,这里再*2?/*/* allocate both capture and display frame buffers */* in external heap memory */*/*分配采集和显示图像的存放缓冲区*/EVMDM642_vCapParamsChan.segId = EXTERNALHEAP;EVMDM642_vDisParamsChan.segId = EXTERNALHEAP;EVMDM642_vDisParamsSAA7105.hI2C = EVMDM642_I2C_hI2C;EVMDM642_vCapParamsSAA7115.hI2C = EVMDM642_I2C_hI2C;/*/* initialization of capture driver */*/*建立并初始化采集设备对象*/#ifdef _LOOPBACKcapChan = FVID_create(/VP0CAPTURE/A/0, IOM_INPUT, &status, (Ptr)&EVMDM642_vCapParamsChan, NULL);#ifdef _PIPEVMDM642_vCapParamsChan2.scale = VPORT_SCALING_ENABLE;EVMDM642_vCapParamsChan2.fldOp = VPORT_FLDOP_FLD1; EVMDM642_vCapParamsChan2.thrld =1;capChan2 = FVID_create(/VP1CAPTURE/A/1, IOM_INPUT, &status, (Ptr)&EVMDM642_vCapParamsChan2, NULL);#endif #endif /*/* initialization of display driver */*/*建立并初始化显示设备对象*/disChan = FVID_create(/VP2DISPLAY, IOM_OUTPUT, &status, (Ptr)&EVMDM642_vDisParamsChan, NULL);/*/* configure video encoder & decoder */*/for ( m_nWork=0;m_nWork6;m_nWork+ )/这里的循环有何用?一直没有弄清楚/*为保证采集和显示设备正常工作,为其设置驱动*/FVID_control(disChan, VPORT_CMD_EDC_BASE + EDC_CONFIG, (Ptr)&EVMDM642_vDisParamsSAA7105);#ifdef _LOOPBACKFVID_control(capChan, VPORT_CMD_EDC_BASE + EDC_CONFIG, (Ptr)&EVMDM642_vCapParamsSAA7115);#ifdef _PIPEVMDM642_vCapParamsSAA7115.aFmt = SAA7115_AFMT_COMPOSITE;FVID_control(capChan2, VPORT_CMD_EDC_BASE+EDC_CONFIG, (Ptr)&EVMDM642_vCapParamsSAA7115);#endif#endif/*/* start capture & display operation */ /*/*开始采集和显示操作*/FVID_control(disChan, VPORT_CMD_START, NULL);#ifdef _LOOPBACKFVID_control(capChan, VPORT_CMD_START, NULL);#ifdef _PIPFVID_control(capChan2, VPORT_CMD_START, NULL);#endif #endif /*/* request a frame buffer from display & capture driver */*/*分配采集和显示一帧图像存放的缓冲区*/FVID_alloc(disChan, &disFrameBuf);#ifdef _LOOPBACKFVID_alloc(capChan, &capFrameBuf);#ifdef _PIPFVID_alloc(capChan2, &capFrameBuf2);#endif #endifframes +;while(1)/* loop forever */#ifdef _LOOPBACK/* copy data from capture buffer to display buffer */*/*将采集缓冲区的内容复制到显示缓冲区*/for(i = 0; i frame.iFrm.y1 + i * capLinePitch, disFrameBuf-frame.iFrm.y1 + i * disLinePitch,numPixels);DAT_copy(capFrameBuf-frame.iFrm.cb1 + i * (capLinePitch 1), disFrameBuf-frame.iFrm.cb1 + i * (disLinePitch 1),numPixels1);DAT_copy(capFrameBuf-frame.iFrm.cr1 + i * (capLinePitch 1), disFrameBuf-frame.iFrm.cr1 + i * (disLinePitch 1),numPixels1);#ifdef _PIP for(i = 0; i 1); i +) DAT_copy(capFrameBuf2-frame.iFrm.y1 + i * yPitch, disFrameBuf-frame.iFrm.y1 + i * disLinePitch+ (disLinePitch 1),(numPixels1);DAT_copy(capFrameBuf2-frame.iFrm.cb1 + i * cPitch, disFrameBuf-frame.iFrm.cb1 + i * (disLinePitch 1)+ (disLinePitch 2 ),(numPixels 2);DAT_copy(capFrameBuf2-frame.iFrm.cr1 + i * cPitch, disFrameBuf-frame.iFrm.cr1 + i * (disLinePitch 1)+(disLinePitch 2),(numPixels 2);#endifDAT_wait(DAT_XFRID_WAITALL);FVID_exchange(capChan, &capFrameBuf);/采集一帧图像#ifdef _PIPFVID_exchange(capChan2, &capFrameBuf2);#endif#else /如果定义CAPTURE则填充图像缓冲区为8条带fillFrmBuf(&disFrameBuf-frame.iFrm, EVMDM642_vDisParamsChan.imgHSizeFld1,EVMDM642_vDisParamsChan.imgVSizeFld1 + EVMDM642_vDisParamsChan.imgVSizeFld2,frames % 360);#endifFVID_exchange(disChan, &disFrameBuf);/将显示缓冲区中一帧图像送给显示设备 frames +; /处理下一帧图像 实验5.20 视频图像处理-取反1将程序改成屏幕1/4进行取反,而其他不变在主程序中ICETEKDM642PCIImageProcessReverse()函数前加if(i(numLines/2),即:if(i(numLines/2)ICETEKDM642PCIImageProcessReverse();并将ICETEKDM642PCIImageProcessReverse()函数中的循环体改为如下:for ( i=0;i720/2;i+ )nMemTemp=nMemTemp;2例程中处理了亮度信号,以下是处理色差信号:for ( i = 0; i frame.iFrm.cb1+i*(capLinePitch1),nMemTemp,numPixels1);DAT_wait(m_nID);ICETEKDM642PCIImageProcessReverse();DAT_copy(nMemTemp,disFrameBuf-frame.iFrm.cb1+i*(disLinePitch1),numPixels1);for ( m_nWork=0;m_nWork1;m_nWork+ )nMemTempm_nWork=0x080;DAT_copy(nMemTemp,disFrameBuf-frame.iFrm.y1+i*disLinePitch,numPixels); DAT_copy(nMemTemp,disFrameBuf-frame.iFrm.cr1+i*(disLinePitch1),numPixels1);出现的问题:图像显示时右半屏有闪烁?实验5.21 视频图像处理-直方图统计程序注释:源程序中定义的js变量不知为何用,于是就删除了#include ICETEK-DM642-PCI.h/工作变量#pragma DATA_SECTION(nMemTemp, .INTPROCBUFF);#pragma DATA_ALIGN(nMemTemp,128);unsigned char nMemTemp720;#pragma DATA_SECTION(nHisto, .INTPROCBUFF);#pragma DATA_ALIGN(nHisto,128);unsigned int nHisto256;unsigned char imgHistoHISTOHIGH*HISTOWIDTH;/128*256int mi,mj,m_nWork1;unsigned int m_nWork,*pWork;unsigned char *pImg,*pImg1;void ICETEKDM642PCIBoardInit()/直方图显示区域初始化for ( mi=0;miHISTOHIGH*HISTOWIDTH;mi+ )imgHistomi=1;for ( mi=0;mi256;mi+ )nHistomi=0;#pragma CODE_SECTION(ICETEKDM642PCIStatistic,.text1)void ICETEKDM642PCIStatistic()/统计一帧图像的直方图int i;for ( i=0;i720;i+ )nHistonMemTemp+;#pragma CODE_SECTION(ICETEKDM642PCIHistogram,.text1)void ICETEKDM642PCIHistogram()/将统计的一帧图像的直方图显示在显示区域上m_nWork=0;for ( mi=0;mi256;mi+ )/找出各灰度级别像素总数最大的if ( m_nWorknHistomi )m_nWork=nHistomi;m_nWork/=(HISTOHIGH-1);/求出比例因子(即像素总数最大值/显示区域的高度)for ( mi=0;mi256;mi+ )/转换各灰度级,将其映射到显示区域(即:各个灰度级的像素/比例因子)nHistomi/=m_nWork;for ( mi=0;miHISTOHIGH*HISTOWIDTH;mi+ )/将显示区域置白imgHistomi=1;pImg = imgHisto; /pImg指针指向显示区域首地址pImg += (HISTOHIGH-1)*HISTOWIDTH); /mImg指针指向显示区域尾地址pImg+;/?for ( mi=1;mi255;mi+,pImg+ )for ( mj=0,pImg1=pImg;mjnHistomi;mj+,pImg1-=HISTOWIDTH )(*pImg1)=HISTOCOLOR;/对应的显示区域填充颜色,这里还是不太明白for ( mi=0;mi256;mi+ ) /清除直方图统计的数组nHistomi=0;实验5.22 视频图像处理-直方图均衡化增强程序注释:直方图均衡化,其实质是图像增强的一种。#include math.h#include ICETEK-DM642-PCI.h/工作变量#pragma DATA_SECTION(nMemTemp, .INTPROCBUFF);#pragma DATA_ALIGN(nMemTemp,128);unsigned char nMemTemp720;#pragma DATA_SECTION(fHisto, .INTPROCBUFF);#pragma DATA_ALIGN(fHisto,128);float fHisto256;/#pragma DATA_SECTION(lut, .INTPROCBUFF);#pragma DATA_ALIGN(lut,128);unsigned char lut256;/保存新的灰度级,是通过上一帧图像计算的int mi,mj,m_nWork1;unsigned int m_nWork,*pWork,js;unsigned char *pImg,*pImg1;float m_fWork;void ICETEKDM642PCIBoardInit()js=0;for ( mi=0;mi256;mi+ )fHistomi=0.0f;lutmi=0;#pragma CODE_SECTION(ICETEKDM642PCIStatistic,.text1)void ICETEKDM642PCIStatistic()int i;for ( i=0;i720;i+ )fHistonMemTemp+;/统计灰度直方图nMemTemp=lutnMemTemp;/新的灰度级映射(通过上一帧图像计算出的新灰度级,处理这一帧图像)#pragma CODE_SECTION(ICETEKDM642PCIHistogramEnhance,.text1)void ICETEKDM642PCIHistogramEnhance()/m_fWork=720*576; fHisto0/=m_fWork;for ( mi=1;mi256;mi+ )/灰度直方图频率fHistomi/=m_fWork;fHistomi+=fHistomi-1;for ( mi=0;mi256;mi+ )/计算新的灰度级m_fWork=fHistomi;m_fWork*=255;lutmi=(unsigned char)m_fWork;/这就是新的灰度级for ( mi=0;mi256;mi+ )/灰度直方图数组清0fHistomi=0.0f;实验5.23 视频图像处理-中值滤波中值滤波算法实质是一种图像噪声的抑制。该系统实现中值滤波算法速度极慢。实验5.24 视频图像处理-边缘检测
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 老年人预防电信诈骗
- 2026年湖北省武汉市单招职业倾向性测试题库必考题
- 过桥资金融资服务协议范本
- 2026年重庆市巴中地区单招职业倾向性测试题库新版
- 2026年重庆建筑科技职业学院单招综合素质考试题库附答案
- 2026年成都工业职业技术学院单招职业适应性测试题库及答案1套
- 2026年无锡科技职业学院单招职业倾向性测试必刷测试卷附答案
- 2026年陕西交通职业技术学院单招职业适应性考试题库附答案
- 2026年湖北幼儿师范高等专科学校单招职业技能测试必刷测试卷附答案
- 2026年毕节医学高等专科学校单招职业适应性考试题库必考题
- 工业视觉方案设计
- 2025中国能源建设集团云南火电建设有限公司校园招聘(46人)笔试历年参考题剖析附带答案详解(3卷合一)
- 2025贵州毕节市中医医院招聘暨人才引进编外聘用专业技术人员78人笔试考试参考试题及答案解析
- 第5部分-消防管理档案(记录表格模板)
- Q-CR 9521-2018 高速铁路信号工程细部设计和工艺质量标准
- GB/T 6892-2000工业用铝及铝合金热挤压型材
- GB/T 6462-2005金属和氧化物覆盖层厚度测量显微镜法
- GB/T 25995-2010精细陶瓷密度和显气孔率试验方法
- 电子科技大学实验室安全考试题库(全部题库)其他各大高校均可使用
- (完整)污水处理厂施工组织设计
- 医疗器械培训计划年
评论
0/150
提交评论