您好,欢迎访问三七文档
대외비目录1.概述2.程序架构3.应用程序设计4.工具链的建立6.视频格式转换5.Jpeg压缩与解压缩8.插值算法7.达芬奇OSD9.InterlacedArtifacts第1页10.Boot11.声音编程대외비一、概述第2页摄像头解码视频处理算法框架OSD功能键盘控制图像匹配语音报警USB功能Flash读写插值技术编码视频输出대외비一、概述摄像头视频输出到具有自动取景功能的系统中第3页将目标的特征图片预存到U盘中根据监控场所不同可以对每次保存图片的个数m,保存图片的间隔n秒进行设置在摄像头监控视角范围内特征出现时,则按照设置内容对图片进行保存,且发出报警信号保存在U盘中的图片可以在监视器上浏览、放大且保证一定的清晰度特征查找实时性高通过按键实现预存特征图片,在监视器上浏览、放大保存的图片增加OSD显示대외비一、达芬奇简介-项目资源第4页芯片:DM6446•评估板:DVEVM•内核:MontaVistaLinux•主机:RedhatLinux•仿真器:XDS510USB•软件:CCS3.2•工具链:CodecEngine1.02•C64x+:DSP内核,执行算法•ARM926EJ‐S:ARM内核,主控整个系统•VPSS:由VPFE和VPBE组成•VICP:视频图象协处理器대외비一、达芬奇简介-项目资源第5页DM6446대외비一、达芬奇简介-项目资源第6页DM6446대외비一、达芬奇简介-项目资源第7页DSPCore•内核:C64x升级到C64x+•指令集:新增ADDSUB2,MAX2,MIN2,DDOTP4,CMPY,DPACK2等指令•片内RAM:L1和L2是各自独立的,而C64x内核中,L1是包含在L2中的•DMA:IDMA+EDMA,支持3D传输,QDMA成为EDMA的一部分,PaRAM长度增加为8个字长대외비一、达芬奇简介-项目资源第8页ARMCore•内核:ARM926EJ‐S•主存:32‐bit,DDR2‐400•EMIF:NorFlash,NandFlash•ATA:HDD,CompactFlash•SDIO:MMC,SD•USB:USB2.0FullSpeed480Mbps•EMAC:10/100MbpsEthernetMACARM대외비一、达芬奇简介-项目资源第9页VPSS•VPSS:VideoProcessSub‐System•VPFE:VideoProcessFront‐End•CCDC:用于视频和图象的采集,可以直接和CMOS或者CCD传感器模组相连•H:直方图统计•3A:自动曝光,自动白平衡,自动聚焦•Preview:快视预览•Resizer:1/4x‐4x的缩放倍数,实现ZOOM대외비一、达芬奇简介-项目资源第10页VPSS•VPSS:VideoProcessSub‐System•VPFE:VideoProcessFront‐End•CCDC:用于视频和图象的采集,可以直接和CMOS或者CCD传感器模组相连•H:直方图统计•3A:自动曝光,自动白平衡,自动聚焦•Preview:快视预览•Resizer:1/4x‐4x的缩放倍数,实现ZOOM•VPBE:VideoProcessBack‐End•OSD:用于制作菜单•DAC:4路DAC输出,支持CVBS格式和S‐Video格式•数字视频输出:支持8‐16bitYUV格式和24bitRGB格式대외비一、达芬奇简介-项目资源第11页评估板:DVEVM•评估板:DVEVM•附带摄像头,模拟屏,红外遥控器,评估板各种接口十分齐全•DVEVM上有三个可编程器件•做为软硬件协同开发的分界平台•快速评估软件和算法的性能대외비一、达芬奇简介-项目资源第12页评估板:DVEVM대외비一、达芬奇简介-项目资源第13页内核:MontaVistaLinux•MontaVistaLinuxPro•内核•文件系统•工具链•DVEVM包含三个组件的评估版•集成开发环境-DevRocket(MontaVistaDevRocket图形开发环境)•DVSDK包含四个组件的企业版대외비一、达芬奇简介-项目资源第14页主机配置•TFTPServer•NFSServer•Minicom•安装的时候禁用防火墙和SELinux대외비一、达芬奇简介-项目资源第15页仿真器:XDS560PCI•算法开发流程中的Emulator•算法的功能验证必须通过仿真器和目标板进行,一般的,Simulator验证通过的代码,Emulator大都正确•底层开发使用,调试硬件,烧写Flash대외비一、达芬奇简介-项目资源第16页软件:CCS3.2•老版本的CCS不支持C64x+的内核•老版本的CCS不支持更高版本的BIOS•我们推荐使用的CCS版本:•CodeComposerStudioVersion3.2.39.5•相关的组件有:•DSPBIOS•CodeGenerateTools•XDCToolsCCS대외비一、达芬奇简介-项目资源第17页工具链:CodecEngine1.02•CodecEngine简称CE•CE是什么?•CE能干什么?•CE由什么组成?•CE怎么使用?•没有CE能不能开发算法?대외비一、达芬奇简介-项目资源第18页工具链:CodecEngine1.02•CE是TI提供的一个软件架构•应用软件通过CE提供的接口调用算法•CE同时支持单核模式和双核模式•CE可以实现双核通信•CE由dsplink,cmem,fc,xdais四个组件和一组VISA的例程构成•没有CE,也可以实现双核系统的开发대외비一、达芬奇简介-项目资源第19页工具链:CodecEngine1.02대외비一、达芬奇简介-项目资源第20页工具链:CodecEngine1.02대외비一、达芬奇简介-项目资源第21页工具链:CodecEngine1.02대외비一、达芬奇简介-项目资源第22页工具链:CodecEngine1.02대외비一、达芬奇简介-项目资源第23页工具链:CodecEngine1.02대외비一、达芬奇简介-项目资源第24页工具链:CodecEngine1.02대외비一、达芬奇简介-项目资源第25页工具链:CodecEngine1.02대외비一、达芬奇简介-项目资源第26页工具链:CodecEngine1.02대외비一、达芬奇简介-项目资源第27页工具链:CodecEngine1.02대외비一、达芬奇简介-项目资源第28页工具链:CodecEngine1.02대외비一、达芬奇简介-项目资源第29页工具链:CodecEngine1.02대외비一、达芬奇简介-完整设计流程第30页•获取算法C模型•获取测试序列•VC或GCC下编译算法C模型,并且根据测试序列生成输出标准序列•算法C模型的优化•移植到CCS下•算法DSP模型的优化대외비一、达芬奇简介-完整设计流程第31页•获取算法C模型•获取测试序列•VC或GCC下编译算法C模型,并且根据测试序列生成输出标准序列•算法C模型的优化•移植到CCS下•算法DSP模型的优化•CCS下用Simulator进行仿真•CCS下用Emulator进行功能验证•Linux下用CE工具链进行算法封装•Linux下用DVEVM进行算法功能验证•Linux下进行算法可重入的功能验证•Linux下制作算法演示Demo대외비一、达芬奇简介-完整工具链第32页•DSPBIOS•CodeGenerateTools•XDCTools•FrameworkComponent•Cmem•DSPLink•XDAIS•CodecEngine대외비二、程序架构第33页目标自动检测CODECENGINEGPPLINUX(generalpurposeprocessor)CODECSERVERDSP(DSPBIOS)算法대외비三、应用程序设计第34页主线程(main.c)。主线程在初始化完数据后就变成控制线程。程序包含6个单独的POSIX线程控制线程(ctrl.c)。完成控制功能,主要是遥控器。视频线程(video.c)。视频采集线程。视频显示线程(display.c)。声音线程(audio_thread.c)。完成语音报警功能。其中,video,display,capture,audio线程由main线程在其变为control线程之前创建。在程序执行起来之后,一共有5个单独的线程在运行。대외비三、应用程序设计-目录第35页优先级说明线程初始化清理同步说明各个线程说明Main线程Video线程Control线程Capture线程Display线程Audio线程대외비三、应用程序设计-优先级说明第36页MSP430+IR红外接口Control线程Main线程Video线程Capture线程Display线程Audio线程遥控器命令OSD菜单VPSS视频处理子系统视频采集视频显示声音대외비三、应用程序设计-优先级说明第37页除了main和control线程之外的线程都配置为优先的且优先策略是(SCHED_FIFO)。SCHED_FIFO(先进先出)策略按线程在执行前在列表上存在的时间对列表上的线程进行排序。处于列表首位的线程通常为在列表上存在时间最长的线程,而处于末尾的线程在列表上存在的时间最短。此策略允许一个线程一直运行,直到具有较高优先级的另一个线程已准备好运行,或者直到当前线程自动阻止。如果此线程被占据,它就继续处于其线程优先级列表的首位;如果此线程阻止,当它再次成为一个可运行的线程时,将被添加到此线程所在的优先级列表的末尾。在本工程中,video,capture,display,audio线程分享最高优先级,而control线程具有最低优先级。대외비三、应用程序设计-线程初始化清理同步说明第38页线程的初始化和清理同步在本程序中使POSIX条件量来完成。这个在main线程中初始化。在Rendezvous模块中:typedefstructRendezvous_Obj{intcount;pthread_mutex_tmutex;pthread_cond_tcond;}Rendezvous_Obj;用count来表示线程的总数,每初始化完一个线程的时候都使count减1表明本线程初始化完毕且等待其他线程。为了避免冲突,使用互斥量来保护对count的操作。대외비三、应用程序设计-线程初始化清理同步说明第39页staticinlinevoidRendezvous_meet(Rendezvous_HandlehRv){pthread_mutex_lock(&hRv-mutex);hRv-count--;if(hRv-count0){pthread_cond_wait(&hRv-cond,&hRv-mutex);}else{pthread_cond_broadcast(&hRv-cond);}pthread_mutex_unlock(&hRv-mutex);}当所有线程都初始化完毕后,所有线程同时解锁并开始执行各自的主循环。对于线程完成后的清理工作也类似。这种对缓存共享的方法就不会出现一个线程对缓存操作没有完成的情况下被其他线程访问。대외비三、应用程序设计-Main线程第40页检测视频标准(PAL/NTSC)ioctl(FBIO_GETSTD);接收命令行输入参数parseArgs();初始化CodecEngineruntimeCERuntime_init();启动CodecEnginetraceloggingTraceUtil_start();打开PauseobjectPause_open()打开RendezvousobjectsRendezvous_open();创建display线程pthread_create();创建capture线程pthread_create();创建video线程pthread_create();创建audio线程pthread_create();调用control线程pthread_create();Main线程主要的任务是执行必要初始化工作,接收命令行参数并传递给其他线程
本文标题:达芬奇培训资料
链接地址:https://www.777doc.com/doc-988526 .html