MTK平台视频倒车显示区域图像裁剪

版权声明:转载请注明博客地址 https://blog.csdn.net/jinron10/article/details/89314235

在倒车显示时,设置预览分辨率是1280x720(AHD)或CVBS(720*576-NTSC制,720*480-PAL制)在LCD1024x600分辨率或1280x720分辨率的屏上显示时,会发现有些摄像头上下左右有黑边,这个时候可以通过ATC芯片内部的倒车模块硬件图像的裁剪功能来达到显示正常图像的目的。必须的TVD图像输出到内部ISP搬运数据到LCD的framebuffer之前进行裁剪,否则显示会有卡顿现象。

方法如下:

使用adb 抓取图像数据:

电脑上执行:
adb root
adb remount
adb shell
进入机器的android运行环境执行:
xxx@xxxx/# setenforce 0
xxx@xxxx/# mkdir /data/mdp/
xxx@xxxx/# setprop dpframework.dumpbuffer.enable 1  // 开始 dump
xxx@xxxx/# setprop dpframework.dumpbuffer.enable 0 // 结束 dump
xxx@xxxx/# exit
电脑上执行:
adb pull /data/sdp .   //将抓取的sdp数据文件拷贝到本地

使用YUV查看工具打开所dump 数据中的 output*.bin(本地电脑的xxxx/mdp/output39635_0.bin)文件,打开格式为YUV422,分辨率选择1024*600,如图可以得出黑边的具体像素大小。

yuv图像工具:https://download.csdn.net/my/uploads中的yuv图像工具

选择1024x600和YUV422_YUYV格式,可以看到左右阴影像素大小,调试的原则,H的设置大小为上面图像显示宽度大小的一半小一点。Y的值为左边从0开始的阴影大小。调整之后根据画面显示大小再进行微调。

如果仍然不行,将X值大小跟Y值设置成一样,仍后再调整W和H值大小,最后左右调整OK之后,再调整Y和H的值,即上下图像的显示即可。

可以使用主界面上的设置菜单中的"显示”——>视频区域裁剪中设置对应参数,经过验证:

是OK的。

那么以上的X、Y和W、H坐标的取值是怎么取的呢?ATC文档中有说需要将参数固化到Metazone中,如下:

那么针对CVBS格式输出到1024x600的LCD屏幕上,针对上面YUV工具得到的黑边,具体是怎么计算上下左右黑边的像素呢,方法如下:

 N制摄像头的分辨率为720*576, P制摄像头的分辨率为720*480,以N制摄像头为例,如下图

这里的裁剪是以视频源的分辨率为标准,假设上图中CVBS画面左右两边均有10px的黑边,那么如果要裁掉坐标的10px的黑边,X取值为10,如果要裁掉右边10px的黑边,那么W为需要显示的宽度,W应该为710-10-10 = 700, 由于上下没有黑边,不用裁剪,那么Y依然为0,H为576。

由于摄像头分辨率为720*576,而屏幕显示分辨率为1024*600,所以从1024*600分辨率屏所测出来的像素并非CVBS 摄像头画面真正的像素,而是通过放大之后的像素,而这个放大就是普通的线性关系,具体为,在1024*600分辨率的屏上,左边17个像素的黑边,那么还原为720 x 576 ,黑边的实际像素为: 17*(720/1024) = 12, 同理,W的值为720-(12-10*(720/1024)) = 701, Y = 0,H = 576。以上均以PAL制摄像头为例,如果是N制摄像头,将576替换成480计算即可。

猜你喜欢

转载自blog.csdn.net/jinron10/article/details/89314235