DM642学习笔记程序注释Word文档下载推荐.docx
- 文档编号:17080208
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:15
- 大小:19.74KB
DM642学习笔记程序注释Word文档下载推荐.docx
《DM642学习笔记程序注释Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《DM642学习笔记程序注释Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。
#include"
colorbar.h"
//如果显示彩色滚动条,就必须有此头文件;
否则不需要
evmdm642_vcapparams.h"
evmdm642_vdisparams.h"
/*heapIDsdefinedintheBIOSconfigurationfile*/
externIntEXTERNALHEAP;
//Ô
Ú
DSP/BIOSÖ
Ð
Ò
Ñ
¶
¨
å
*========main========
main()
{
/******************************************************/
/*openCSLDATmoduleforfastcopy*/
CSL_init();
//调用任何CSL库中的函数,必须先在此调用函数
CACHE_clean(CACHE_L2ALL,0,0);
//清洗Cache模式
CACHE_setL2Mode(CACHE_256KCACHE);
//设置Cache模式
CACHE_enableCaching(CACHE_EMIFA_CE00);
//使能EMIFACE0空间
CACHE_enableCaching(CACHE_EMIFA_CE01);
//使能EMIFACE1空间
DAT_open(DAT_CHAANY,DAT_PRI_LOW,DAT_OPEN_2D);
//打开数据传输
}
*========tskVideoLoopback========
*videoloopbackfunction.
voidtskVideoLoopback()
Inti;
intm_nWork;
Intstatus;
FVID_HandledisChan;
//设置设备句柄
Intframes=0;
FVID_Frame*disFrameBuf;
IntnumLinesDis=EVMDM642_vDisParamsChan.imgVSizeFld1;
//设置显示的行数,VGA为480,PAL为576
IntnumLinesCap=EVMDM642_vCapParamsChan.fldYStop1-//设置采集行数
EVMDM642_vCapParamsChan.fldYStrt1+1;
/*判断是显示区域大,还是采集区域大,取其小者*/
IntnumLines=(numLinesDis>
numLinesCap)?
numLinesCap:
numLinesDis;
#ifdef_LOOPBACK
FVID_HandlecapChan;
/*设置每行显示的像素数,PAL制为720*/
IntnumPixels=EVMDM642_vCapParamsChan.fldXStop1-
EVMDM642_vCapParamsChan.fldXStrt1+1;
FVID_Frame*capFrameBuf;
/*设置采集图像一行的总像素*/
IntcapLinePitch=EVMDM642_vCapParamsChan.fldXStop1-
/*设置显示图像一行的总像素*/
IntdisLinePitch=EVMDM642_vDisParamsChan.imgHSizeFld1;
#ifdef_PIP
VPORTCAP_ParamsEVMDM642_vCapParamsChan2=EVMDM642_vCapParamsChan;
FVID_HandlecapChan2;
FVID_Frame*capFrameBuf2;
IntyPitch=capLinePitch>
>
1;
IntcPitch=((capLinePitch>
2)+7)&
(~7);
#endif
#endif
numLines*=2;
/*bothfields*/如果输出为PAL制,前面numLinesCap不要*2,这里再*2?
/*allocatebothcaptureanddisplayframebuffers*/
/*inexternalheapmemory*/
/*分配采集和显示图像的存放缓冲区*/
EVMDM642_vCapParamsChan.segId=EXTERNALHEAP;
EVMDM642_vDisParamsChan.segId=EXTERNALHEAP;
EVMDM642_vDisParamsSAA7105.hI2C=EVMDM642_I2C_hI2C;
EVMDM642_vCapParamsSAA7115.hI2C=EVMDM642_I2C_hI2C;
/*initializationofcapturedriver*/
/*建立并初始化采集设备对象*/
capChan=FVID_create("
/VP0CAPTURE/A/0"
IOM_INPUT,&
status,(Ptr)&
EVMDM642_vCapParamsChan,NULL);
EVMDM642_vCapParamsChan2.scale=VPORT_SCALING_ENABLE;
EVMDM642_vCapParamsChan2.fldOp=VPORT_FLDOP_FLD1;
EVMDM642_vCapParamsChan2.thrld>
=1;
capChan2=FVID_create("
/VP1CAPTURE/A/1"
EVMDM642_vCapParamsChan2,NULL);
/*initializationofdisplaydriver*/
/*建立并初始化显示设备对象*/
disChan=FVID_create("
/VP2DISPLAY"
IOM_OUTPUT,
&
EVMDM642_vDisParamsChan,NULL);
/*configurevideoencoder&
decoder*/
for(m_nWork=0;
m_nWork<
6;
m_nWork++)//这里的循环有何用?
?
一直没有弄清楚
{
/*为保证采集和显示设备正常工作,为其设置驱动*/
FVID_control(disChan,VPORT_CMD_EDC_BASE+EDC_CONFIG,
(Ptr)&
EVMDM642_vDisParamsSAA7105);
FVID_control(capChan,VPORT_CMD_EDC_BASE+EDC_CONFIG,
EVMDM642_vCapParamsSAA7115);
EVMDM642_vCapParamsSAA7115.aFmt=SAA7115_AFMT_COMPOSITE;
FVID_control(capChan2,VPORT_CMD_EDC_BASE+EDC_CONFIG,
}
/*startcapture&
displayoperation*/
/*开始采集和显示操作*/
FVID_control(disChan,VPORT_CMD_START,NULL);
FVID_control(capChan,VPORT_CMD_START,NULL);
FVID_control(capChan2,VPORT_CMD_START,NULL);
/********************************************************/
/*requestaframebufferfromdisplay&
capturedriver*/
/*分配采集和显示一帧图像存放的缓冲区*/
FVID_alloc(disChan,&
disFrameBuf);
FVID_alloc(capChan,&
capFrameBuf);
FVID_alloc(capChan2,&
capFrameBuf2);
frames++;
while
(1){/*loopforever*/
/*copydatafromcapturebuffertodisplaybuffer*/
/***************************************************/
/*将采集缓冲区的内容复制到显示缓冲区*/
for(i=0;
i<
numLines;
i++){
DAT_copy(capFrameBuf->
frame.iFrm.y1+i*capLinePitch,
disFrameBuf->
frame.iFrm.y1+i*disLinePitch,
numPixels);
frame.iFrm.cb1+i*(capLinePitch>
1),
frame.iFrm.cb1+i*(disLinePitch>
1),
numPixels>
1);
frame.iFrm.cr1+i*(capLinePitch>
frame.iFrm.cr1+i*(disLinePitch>
#ifdef_PIP
(numLines>
DAT_copy(capFrameBuf2->
frame.iFrm.y1+i*yPitch,
frame.iFrm.y1+i*disLinePitch
+(disLinePitch>
(numPixels>
1));
frame.iFrm.cb1+i*cPitch,
1)
2),
(numPixels>
2));
frame.iFrm.cr1+i*cPitch,
+(disLinePitch>
2),
DAT_wait(DAT_XFRID_WAITALL);
FVID_exchange(capChan,&
//采集一帧图像
FVID_exchange(capChan2,&
#else//如果定义CAPTURE则填充图像缓冲区为8条带
fillFrmBuf(&
disFrameBuf->
frame.iFrm,EVMDM642_vDisParamsChan.imgHSizeFld1,
EVMDM642_vDisParamsChan.imgVSizeFld1
+EVMDM642_vDisParamsChan.imgVSizeFld2,
frames%360);
FVID_exchange(disChan,&
//将显示缓冲区中一帧图像送给显示设备
//处理下一帧图像
实验5.20视频图像处理-取反
1.将程序改成屏幕1/4进行取反,而其他不变
在主程序中ICETEKDM642PCIImageProcessReverse()函数前加if(i<
(numLines/2)),即:
if(i<
(numLines/2))
ICETEKDM642PCIImageProcessReverse();
并将ICETEKDM642PCIImageProcessReverse()函数中的循环体改为如下:
for(i=0;
i<
720/2;
i++)
nMemTemp[i]=~nMemTemp[i];
2.例程中处理了亮度信号,以下是处理色差信号:
for(i=0;
i++)
{
m_nID=DAT_copy(capFrameBuf->
frame.iFrm.cb1+i*(capLinePitch>
1),nMemTemp,numPixels>
DAT_wait(m_nID);
ICETEKDM642PCIImageProcessReverse();
DAT_copy(nMemTemp,disFrameBuf->
frame.iFrm.cb1+i*(disLinePitch>
1),numPixels>
for(m_nWork=0;
numPixels>
1;
m_nWork++)
nMemTemp[m_nWork]=0x080;
frame.iFrm.y1+i*disLinePitch,numPixels);
DAT_copy(nMemTemp,disFrameBuf->
frame.iFrm.cr1+i*(disLinePitch>
出现的问题:
图像显示时右半屏有闪烁?
~~~
实验5.21视频图像处理-直方图统计
程序注释:
源程序中定义的js变量不知为何用,于是就删除了~~~
ICETEK-DM642-PCI.h"
//工作变量
#pragmaDATA_SECTION(nMemTemp,"
.INTPROCBUFF"
);
#pragmaDATA_ALIGN(nMemTemp,128);
unsignedcharnMemTemp[720];
#pragmaDATA_SECTION(nHisto,"
#pragmaDATA_ALIGN(nHisto,128);
unsignedintnHisto[256];
unsignedcharimgHisto[HISTOHIGH*HISTOWIDTH];
//128*256
intmi,mj,m_nWork1;
unsignedintm_nWork,*pWork;
unsignedchar*pImg,*pImg1;
voidICETEKDM642PCIBoardInit()//直方图显示区域初始化
for(mi=0;
mi<
HISTOHIGH*HISTOWIDTH;
mi++)
imgHisto[mi]=1;
256;
nHisto[mi]=0;
#pragmaCODE_SECTION(ICETEKDM642PCIStatistic,"
.text1"
)
voidICETEKDM642PCIStatistic()//统计一帧图像的直方图
inti;
720;
nHisto[nMemTemp[i]]++;
#pragmaCODE_SECTION(ICETEKDM642PCIHistogram,"
voidICETEKDM642PCIHistogram()//将统计的一帧图像的直方图显示在显示区域上
m_nWork=0;
mi++)//找出各灰度级别像素总数最大的
if(m_nWork<
nHisto[mi])
m_nWork=nHisto[mi];
m_nWork/=(HISTOHIGH-1);
//求出比例因子(即像素总数最大值/显示区域的高度)
mi++)//转换各灰度级,将其映射到显示区域(即:
各个灰度级的像素/比例因子)
nHisto[mi]/=m_nWork;
mi++)//将显示区域置白
pImg=imgHisto;
//pImg指针指向显示区域首地址
pImg+=((HISTOHIGH-1)*HISTOWIDTH);
//mImg指针指向显示区域尾地址
pImg++;
//?
?
for(mi=1;
255;
mi++,pImg++)
for(mj=0,pImg1=pImg;
mj<
nHisto[mi];
mj++,pImg1-=HISTOWIDTH)
(*pImg1)=HISTOCOLOR;
//对应的显示区域填充颜色,这里还是不太明白
mi++)//清除直方图统计的数组
实验5.22视频图像处理-直方图均衡化增强
直方图均衡化,其实质是图像增强的一种。
math.h"
#pragmaDATA_SECTION(fHisto,"
#pragmaDATA_ALIGN(fHisto,128);
floatfHisto[256];
//
#pragmaDATA_SECTION(lut,"
#pragmaDATA_ALIGN(lut,128);
unsignedcharlut[256];
//保存新的灰度级,是通过上一帧图像计算的
unsignedintm_nWork,*pWork,js;
floatm_fWork;
voidICETEKDM642PCIBoardInit()
js
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DM642 学习 笔记 程序 注释