基于avd7181c解决视频输入效果差的问题<三>---CVBS无色彩疑难调试手记

基于avd7181c解决视频输入效果差的问题<三>---CVBS无色彩疑难调试手记

 

         笔者在前两篇文章中讲述了基于AVD7181C来解决平台视频输入效果差的问题大概解决方案以及遇到的IIC兼容性问题的解决方法,在本文中将继续解释笔者在调试AVD7181C CVBS输入信号的情况下遇到的没有色彩的问题。笔者经过逐步的验证、推敲终于解决了这个问题,现将过程大概介绍一下。

        通过前面的努力,CSI的数据通道已经打通,通过camera APK可以看到YPBPR\CVBS的输入信号了,YPBPR相对更方便一些,因为AVD7181C输出的是YUV4:2:2的信号,跟普通camera是一样的,所以很容易就出来彩色了,显示正常。笔者在CVBS上,发现只有黑白图像,没有任何彩色,怎么回事?在没有cvbs信号的时候AVD7181C输出的设置为蓝色,显示可是红色,为什么?

/*****************************************************************************************************/
声明:本博内容均由http://blog.csdn.net/sundesheng125原创,转载请注明出处,谢谢!
/*****************************************************************************************************/

       首先,AVD7181C在CVBS输入信号的情况下,输出的656的信号,这个跟ypbpr是不大一样的,在yuv信号过来的uv的顺序上也是不大一样,因此android
层的显示系统需要相应调整。笔者修改了android4.0\device\softwinner\common\hardware\camera\CameraHardware.cpp的status_t CameraHardware::doStartPreview()接口实现。具体代码如下:

    } else if (strcmp(pix_fmt, CameraParameters::PIXEL_FORMAT_YUV420SP) == 0) {
    //	bPixFmtNV12 = true;
    	if (bPixFmtNV12) {
			LOGD("============== DISP_SEQ_UVUV");
			mPreviewWindow.setLayerFormat(DISP_SEQ_UVUV);
        	org_fmt = V4L2_PIX_FMT_NV12;		// for HW encoder
    	} else {
	    	LOGD("============== DISP_SEQ_VUVU");
			LOGD("==============force to DISP_SEQ_UVUV");
			mPreviewWindow.setLayerFormat(DISP_SEQ_UVUV);
        	org_fmt = V4L2_PIX_FMT_NV12;		// for HW encoder
			//mPreviewWindow.setLayerFormat(DISP_SEQ_VUVU);
      //  	org_fmt = V4L2_PIX_FMT_NV21;		// for some apps
    	}
    } else {
        LOGE("%s: Unsupported pixel format %s", __FUNCTION__, pix_fmt);
        mPreviewWindow.stopPreview();
        return EINVAL;
    }

      笔者经过这样修改了后,在无cvbs输入信号的情况下,已经可以顺利显示蓝色了,UV反了还好说,至少还是有彩色的。可是在接入cvbs信号后,怎么只有黑白信号,无彩色呢,这样很难让人理解。跟在其他OS平台上使用过AVD7181C的同事沟通后,觉得要么是显示系统的问题,要么是前端有问题。哎!是啊!整条通路上都可以怀疑。

       作为软件工程师,都比较老实,首先开展自我批评,从自己能做的入手吧!把自己能够验证的地方都先去验证一下。这样到最后问题还是没眉目,找硬件同事也好沟通,笔者就这样干了一回。首先从接收YUV数据的buffer入手,应该接收数据的buffer是必须连续的,所以得到的都是物理地址。笔者把设置接收fifo数据的buffer地址先记录下来,在frame
IRQ来的时候,也就是一帧数据采集好后会有一个中断过来。在中断处理函数中,把这个buffer里的UV数据给认为写一些自己定义的值。笔者增加的测试代码如下:

#if  1
	int i;
	i = (bufindex)%2;
	if(NULL == gbuforg[i])
			i = 0;//just empty operate
	else {
	   //memset((void *)__phys_to_virt(gbuforg[i]), 0x39, gwh);//0x39 89
	   memset((void *)__phys_to_virt(gbuforg[i]+gwh), 0x20, gwh/8);//0x60  10
	   //memset((void *)__phys_to_virt(gbuforg[i]+gwh+gwh*1/8), 0x70, gwh/8);//0x60 use src data		    memset((void *)__phys_to_virt(gbuforg[i]+gwh+gwh*1/4), 0xf0, gwh/8);//0x60  10
	   memset((void *)__phys_to_virt(gbuforg[i]+gwh+gwh*3/8), 0x80, gwh/8);//0x60  10
	     }

//  for(i=0; i < 1000; i++)
//    printk("%x ", ((unsigned char *)__phys_to_virt(gbuforg[bufindex%2]+gwh))[1000+i]);

//  printk("\n");
#endif

        代码中gwh为图像的宽X高。gbuforg[]是一个buffer数组,存放YUV数据的buffer 地址,当然要从物理地址转化成虚拟地址。

        加了上面代码后,显示结果在理论上是把整个图像分成了4份,其中一份不去破坏原始数据,采用采集到的的数据。图像显示如下:  

          从这个显示结果上看,彩色是能显示出来的,因此从理论上讲显示系统应该是能够显示出彩色,由此判断可能是数据采集的问题。在IRQ处理中,笔者打印了一些采集到的数据,发现得到的都是同一个值0x80,也就是没有彩色,很显然是前端的问题了。

         跟硬件工程师沟通后,有理有据,应该从硬件方面再下点功夫了,软件上已经没什么招了。硬件同事仔细对比、分析,给晶振上加了两个电容。果然,色彩出来了。跟硬件同事沟通,从他的角度可能是软件方面的问题,因为ypbpr是有色彩的,cvbs也就是一根线,有亮度,应该说通路是可以的。这样说也是有道理的,在工作配合中,软件工程师跟硬件同事要和谐相处,不要相互埋怨。硬件搞不动了,软件再倒腾倒腾;软件上没法倒腾了,硬件工程师再搞搞,多验证,多怀疑,所以要跟硬件同事搞好关系,问题还没定位出来解决之前,都不能肯定是谁的问题。有问题,找问题,找解决办法,千万不能相互指责、埋怨,即使最后确定不是自己的问题,也不要去埋怨同事。智者千虑必有一失,更何况我们还不能算是智者呢!哈哈!融洽相处,快乐工作!

          下面贴一张正常出彩色的图片作为本文结尾。 

 

时间: 2024-12-05 13:06:31

基于avd7181c解决视频输入效果差的问题&lt;三&gt;---CVBS无色彩疑难调试手记的相关文章

基于avd7181c解决视频输入效果差的问题&amp;lt;四&amp;gt;---android显示相关实现调试手记

基于avd7181c解决视频输入效果差的问题<四>---android显示相关实现调试手记            笔者在前几篇文章中提到的都是AVD7181C的信号通过CSI的数据通道,然后给camera APK来显示,就可以看到YPBPR\CVBS的输入信号了.利用camera apk调试AVD7181C也是为了加快调试进度,笔者在实践中确实感觉很有益.通过它,我们可以先把AVD7181C以及CSI的驱动先调试稳定下来,调试正确,确保数据到应用之前是正确的,但是最终我们是要作产品,总不能用c

基于avd7181c解决视频输入效果差的问题&amp;lt;二&amp;gt;---疑难调试手记

基于avd7181c解决视频输入效果差的问题<二>---疑难调试手记          笔者在上一篇文章中讲述了基于AVD7181C来解决平台视频输入效果差的问题大概解决方案.在这个探索研究中,也遇到了一些比较麻烦的问题.下面就讲述一些遇到的几个让人欢喜让人忧的问题.       Avd7181c是通过IIC来控制的.因为iic也是一种非常成熟的通讯接口,我们就直接用全志平台里整理过的iic操作sensor_read, sensor_write接口,这两个接口在平台支持的camera有很多种型

基于avd7181c解决视频输入效果差的问题&amp;lt;一&amp;gt;---驱动移植、调试手记

基于avd7181c解决视频输入效果差的问题<一>---驱动移植.调试手记             做过全志A10平台的人都知道,在视频输入方面,虽然有4路TV Decoder,但是做的效果真的不敢恭维.笔者基于全志平台做车载互动娱乐系统以及车载导航主机,客户对视频输入效果有强烈要求,怎么办呢? 加芯片弥补平台的不足.笔者选用的是AVD7181C芯片,可以支持CVBS\S-Video\YPbPr\RGB等多种输入格式,通过该芯片可以输出YUV 4:2:2信号.656信号.YPbPr输入信号的情

归纳企业做竞价广告效果差的三大自身原因

对于每一家资本企业来说,我想经营的目的无非是最小的投入获得最大的收益.对此每一家企业在做一项投资时都会对投入与收益做投资回报率的估算.在线上营销中更是如此.众所周知在线上营销的策略中竞价广告可谓是一项最烧钱的策略,需要企业不断的投入资金,但是很多企业在竞价广告投入大把的资金后却发现效果却不尽如人意.其实竞价广告之所以会失败往往是来自企业自身对于一些细节上的疏忽.下面笔者就以自身的经验谈谈在企业做竞价广告时促使效果差的三大自身原因. 自身原因一:你是否对于投放的技巧进行斟酌过 在竞价广告的投放上也

基于jquery实现放大镜效果_jquery

各大商城详细页面产品图片特效展示,鼠标滑过小图显示中图,鼠标滑过中图显示大图展示,jquery放大镜效果图片类似图片放大镜展示,提高用户体验设计,jquery 图片放大镜效果是典型的一款图片特效展示. 效果图如下: 图片大框初始样式: <div class="goods-imginfo-bimg-box" style="background-image: url(http://www.od.my/images/201507/thumb_img/142_thumb_P_1

JS基于递归实现倒计时效果的方法_javascript技巧

本文实例讲述了JS基于递归实现倒计时效果的方法.分享给大家供大家参考,具体如下: 效果: 事件: //发送验证码 $('.js-sms-code').click(function(){ $(this).attr("disabled", "disabled").html("<span style='color:#666'><span id='countdown'>60</span>s 后再试</span>&qu

基于jquery的loading效果实现代码_jquery

在代码<head></head>里加入以下代码: <script type="text/javascript" src="jquery.js"></script><script type="text/javascript">$(window).load(function(){$("#loading").hide();})</script> 在里<bo

25款室内净化器净化效果差6倍

摘要: 空气净化器已成为污染环境下很多家庭的标配,这些净化器真的能帮助净化空气吗?昨天,中消协对外公布25款净化器的比较试验结果,不同的室内净化器净化效果相差6倍之多.一款售 空气净化器已成为污染环境下很多家庭的"标配",这些净化器真的能帮助净化空气吗?昨天,中消协对外公布25款净化器的比较试验结果,不同的室内净化器净化效果相差6倍之多.一款售价上万元的净化器无论是净化颗粒物还是除甲醛,效果都不理想. 25款室内净化器净化效果差6倍 这25款净化器是中消协人员以消费者身份从北京.天津的

腾云语音报钟器:五大功能彻底解决技师服务差的困扰

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 目前大部分洗浴/足浴行业会遇到这样的问题:生意好,客人峰拥而至,服务员与技师却手忙脚乱,大大降低效率,客户回头率比较低,服务无法提升...针对这一系列问题,洗浴经营管理者该如何应对? 佳驰软件旗下腾云洗浴/足浴管理软件,八年行业经验,为上万家洗浴/足浴行业提供完善的贴心服务,好评率非常高!作为行业首家提出完美智能无线报钟器解决方案,被客户一致