ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:19.74KB ,
资源ID:4164196      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4164196.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(DM642学习笔记程序注释.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

DM642学习笔记程序注释.docx

1、DM642学习笔记程序注释张伟刚 QQ:263298490用的是瑞泰创新的实验箱(ICETEK-DM642-IDK-M),主要是视频处理部分的程序注释及思考题思路。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

2、 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 evm

3、dm642_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

4、(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

5、; 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 = (numLinesD

6、is numLinesCap) ? numLinesCap : numLinesDis;#ifdef _LOOPBACK FVID_Handle capChan; /*设置每行显示的像素数,PAL制为720*/ Int numPixels = EVMDM642_vCapParamsChan.fldXStop1 - EVMDM642_vCapParamsChan.fldXStrt1+1; FVID_Frame *capFrameBuf; /*设置采集图像一行的总像素*/ Int capLinePitch = EVMDM642_vCapParamsChan.fldXStop1 - EVMDM642

7、_vCapParamsChan.fldXStrt1+1; /*设置显示图像一行的总像素*/ Int disLinePitch = EVMDM642_vDisParamsChan.imgHSizeFld1;#ifdef _PIP VPORTCAP_Params EVMDM642_vCapParamsChan2 = EVMDM642_vCapParamsChan; FVID_Handle capChan2; FVID_Frame *capFrameBuf2; Int yPitch = capLinePitch 1; Int cPitch = (capLinePitch 2) + 7) & ( 7)

8、;#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_vDisPa

9、ramsSAA7105.hI2C = EVMDM642_I2C_hI2C; EVMDM642_vCapParamsSAA7115.hI2C = EVMDM642_I2C_hI2C; /*/ /* initialization of capture driver */ /*/ /*建立并初始化采集设备对象*/#ifdef _LOOPBACK capChan = FVID_create(/VP0CAPTURE/A/0, IOM_INPUT, &status, (Ptr)&EVMDM642_vCapParamsChan, NULL);#ifdef _PIP EVMDM642_vCapParamsCh

10、an2.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 */ /*/ /*建立并初始化显示设备对象*/ disC

11、han = 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_vDisParamsSAA

12、7105);#ifdef _LOOPBACK FVID_control(capChan, VPORT_CMD_EDC_BASE + EDC_CONFIG, (Ptr)&EVMDM642_vCapParamsSAA7115);#ifdef _PIP EVMDM642_vCapParamsSAA7115.aFmt = SAA7115_AFMT_COMPOSITE; FVID_control(capChan2, VPORT_CMD_EDC_BASE+EDC_CONFIG, (Ptr)&EVMDM642_vCapParamsSAA7115);#endif#endif /*/ /* start capt

13、ure & display operation */ /*/ /*开始采集和显示操作*/ FVID_control(disChan, VPORT_CMD_START, NULL);#ifdef _LOOPBACK FVID_control(capChan, VPORT_CMD_START, NULL);#ifdef _PIP FVID_control(capChan2, VPORT_CMD_START, NULL);#endif #endif /*/ /* request a frame buffer from display & capture driver */ /*/ /*分配采集和显示

14、一帧图像存放的缓冲区*/ FVID_alloc(disChan, &disFrameBuf);#ifdef _LOOPBACK FVID_alloc(capChan, &capFrameBuf);#ifdef _PIP FVID_alloc(capChan2, &capFrameBuf2);#endif #endif frames +; while(1)/* loop forever */#ifdef _LOOPBACK /* copy data from capture buffer to display buffer */ /*/ /*将采集缓冲区的内容复制到显示缓冲区*/ for(i =

15、 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.

16、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 * (disLin

17、ePitch 1) + (disLinePitch 2 ), (numPixels 2); DAT_copy(capFrameBuf2-frame.iFrm.cr1 + i * cPitch, disFrameBuf-frame.iFrm.cr1 + i * (disLinePitch 1) +(disLinePitch 2), (numPixels 2); #endif DAT_wait(DAT_XFRID_WAITALL); FVID_exchange(capChan, &capFrameBuf);/采集一帧图像#ifdef _PIP FVID_exchange(capChan2, &ca

18、pFrameBuf2);#endif#else /如果定义CAPTURE则填充图像缓冲区为8条带 fillFrmBuf(&disFrameBuf-frame.iFrm, EVMDM642_vDisParamsChan.imgHSizeFld1, EVMDM642_vDisParamsChan.imgVSizeFld1 + EVMDM642_vDisParamsChan.imgVSizeFld2, frames % 360);#endif FVID_exchange(disChan, &disFrameBuf);/将显示缓冲区中一帧图像送给显示设备 frames +; /处理下一帧图像 实验5.

19、20 视频图像处理-取反1将程序改成屏幕1/4进行取反,而其他不变在主程序中ICETEKDM642PCIImageProcessReverse()函数前加if(i(numLines/2),即:if(i(numLines/2) ICETEKDM642PCIImageProcessReverse();并将ICETEKDM642PCIImageProcessReverse()函数中的循环体改为如下: for ( i=0;i720/2;i+ ) nMemTempi=nMemTempi;2例程中处理了亮度信号,以下是处理色差信号:for ( i = 0; i frame.iFrm.cb1+i*(capL

20、inePitch1),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(n

21、MemTemp,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, .INTP

22、ROCBUFF);#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

23、;mi+ ) nHistomi=0;#pragma CODE_SECTION(ICETEKDM642PCIStatistic,.text1)void ICETEKDM642PCIStatistic()/统计一帧图像的直方图 int i; for ( i=0;i720;i+ ) nHistonMemTempi+; #pragma CODE_SECTION(ICETEKDM642PCIHistogram,.text1)void ICETEKDM642PCIHistogram()/将统计的一帧图像的直方图显示在显示区域上 m_nWork=0; for ( mi=0;mi256;mi+ )/找出各灰度

24、级别像素总数最大的 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)*HISTOW

25、IDTH); /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/工作变量

26、#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

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1