|
楼主 |
发表于 2007-10-25 17:01:52
|
显示全部楼层
我这几个问题是关于lcd和sensor的,原理上应该具有普遍性,
但实际上应该和具体实现关系很大,我的平台是mtk6226,05C代码,
望老手高手们指导,别嫌我罗嗦,我是想把问题和现象说得清楚些。
一、播放存储卡上电影时显示屏幕跳动出现分屏的现象。
但是播放开关机等动画的时候没有任何问题,其它
情况下的lcd显示也没有任何问题。
播放速度越高,跳动越厉害,播放速度为0.5的时候就
只有轻微跳动。另外,任何时候旋转为全屏播放正常,
暂停播放后的画面也正常。
这个问题刚开始怀疑是LCD驱动时序的问题,但是修改
时序和在BlockWrite函数坐标寄存器写入间加入延迟,
问题依旧;另外如果是时序有问题的话,由于播放电影
时是显示数据的高速刷新,数据出错应该引起花屏现象,
但是并没有任何颜色出错,
所以后来认为不是LCD驱动时序问题。
然后怀疑是驱动或上层应用播放时传递的坐标不对。
但是因为任何时候暂停播放后的画面和播放一般的gif,
图片显示等都正常,所以排除驱动的BlockWrite函数
坐标设置错误;同时trace上层应用请求播放电影时
传过来的坐标也发现没有任何问题。
因为播放时降低速度跳动现象有好转,又怀疑是6226
mpeg4解码速度慢或者lcd总线刷新跟不上引起的,
但是我们屏小(128X160),8bit并行数据总线,52MHz
这个想法也基本不成立。另外,因为播放时如果旋转为
全屏播放的话也正常,也能证明不存在吞吐率问题。
希望高人们能提供些思路和debug方法
二、附带地,camera摄像时屏幕也有同样的现象,通常大家
会修改sensor的帧率,时钟,图像的分辨率等来解决这个
问题。但是因为我单单播放电影文件时也跳动,所以看来
并不是camera的帧率问题。
三、ov7660问题。preivew下当被拍摄物体在摄像头前移动或者摄像头
突然对着光照条件不同的场景时,屏幕上会出现面积形状
都不定橘红色区域。比如用手指挡住lens再拿开时,对着
白色背景的电脑液晶显示器时,现象最严重。不知道是什么
原因?请达人指点。调整曝光等基本没有什么改善。ov的
fae居然跟我说这是我lcd太差,气死我了。
知道原因的老手们要不吝赐教啊,感激不尽。
四、由于使用的是rgb raw格式,因此ov的fae说sensor本身
没有什么好调的了,主要调的是mtk的isp相关部分。
但是isp相关的东西我只看到bb chip的datasheet上有
简单介绍(只有些寄存器列表,语焉不详),所以我很
奇怪大家是怎么调的,这个isp我觉得可能要几百页的
文档才能讲清楚的,大家调试时怎么知道的该怎么修改
那些寄存器呢
既然rgb raw不好搞,那就用yuv吧,但是我要了一份代码
过来想合并到我的05C中,结果失败了,好多都编译不过
(isp_yuv_if.c .h , cam_hp_msg_handler.c, cam_hp_ilm.c
med_c_main.c, med_api.h, img_comm.c, med_context.h
med_c_context.h, med_c_main.h.....等文件 )
做个这个的说几句,能留个联系方式最好了。
五、还有一个就是gamma表的问题,我问ov的fae要,结果他说
因为我用的是rgb raw,所以得问mtk要,虽然现在gamma
校正确实是isp做得,但是我想这个东西是根据每个sensor/lens
的色彩和感光特性来的呀,ov的人就会推脱,nnd。不知道
我这个想法对不?
六、还有就是一个旋转问题,我的preview图和实际物体差了90度,
sensor寄存器只能调mirror和flip,而makefile中SENSOR_ROTATE
宏的SENSOR_ROTATE_90, SENSOR_ROTATE_270两个取值在代码
中事实上是不支持的,不起作用。其实我认为isp完全应该
能解决这个问题的,只需要以某种顺序写入和另一种顺序读出
象素数据,但不知道为什么SENSOR_ROTATE_90, SENSOR_ROTATE_270
就是不支持。不知道大家都是怎么解决的,
有人跟我说让厂家重做模块,不知道能行不,厂家又根据什么
道理可以改这个呢?
另外还有个size match问题,sensor 640X480,而LCD 128X160,
bb chip中的resier电路驱动程序能根据我的sensor和lcd size自动
match吗,还是不行,所以才造成了我的rotate90问题?
七、有人跟我说rgb raw只有mtk能调,还需要一些工具和仪器等,
真的吗?
八、时序问题。我代码中
#if defined(CAM_PREVIEW_15FPS)
SET_TG_OUTPUT_CLK_DIVIDER(3);
SET_CMOS_RISING_EDGE(0);
SET_CMOS_FALLING_EDGE(2);
ENABLE_CAMERA_PIXEL_CLKIN_ENABLE;
SET_TG_PIXEL_CLK_DIVIDER(7);
SET_CMOS_DATA_LATCH(3);
Mclk=52/(3+1)=13M, plck=13/(7+1)=1.75M,
但是我640X480X15都不止这个数啊,还没有算dummy line&piexl,
有人能解释下吗? |
|