Xilinx社区
首页 > 技术专栏 > 骁龙820A 车载原型系统上调试OV5647记录(3)
骁龙820A 车载原型系统上调试OV5647记录(3)
来源:Qualcomm 时间:2017-07-17

  其实,骁龙820A搭载 Qualcomm Adreno™ 530 GPU,最高支持OpenGL ES 3.1 + 版本,可为四个显示器提供电力,包括多个 4K 显示器。但它最重要的功能是支持高质量的2D和3D导航应用,并提供惊人的高清用户界面。骁龙820A最先进的硬件构建了图形导航叠加层,最终集成3D地图。

  GPU上的实时图像处理功能通过捕获汽车实际路线的原始帧来为车道检测功能提供动力。使用强度过滤器来检测道路上的标记。然后应用边缘检测,其适合直线到边缘并估计消失点。利用这些信息,GPU能够构建一个覆盖所有特征的地图。最终,图形引擎呈现出高质量的3D地图。

  本篇是OV5647的调试该系列的第三篇,为了能够看到RAW数据正式效果,笔者专门研究了下raw格式的转换原理,并且开发了一个简单的转换工具。

  OV5647的raw格式

  OV5647支持8bit和10bit的bayer类型图像输出,通过在CSI-2总线上发送像素数据来执行8/10位原始数据传输。

  表 1 RAW8 Packet Data Size Constraints

  从表1可以看到raw8每一个像素点都是一个字节。

  表 2 RAW10 Packet Data Size Constraints

  而从表二可以看到,raw10是每四个像素点用五个字节表示,实际上每个像素点用10bit表示。

  表 3 RAW8 Transmission

  表 4 RAW10 Transmission

  根据表3和表4可以看出raw10每四个像素点的后两位可以在每五个字节中周到对应的位置。

  OV5647的数据转换工具

  根据raw数据格式类型和存储格式,小编写了一个简单的数据转换的工具,否则的话需要特定的软件才能看到图像数据,具体代码如下。

  参数p是从驱动接收的buffer原始数据帧。

  参数name 是保存文件名字(前缀),如1.raw,1_out.rgb,1_out.yuv

  static void process_image (const void * p,char* name){

  //Convert raw10 to RGB24;

  unsigned char* in=(unsigned char*)p;//输入数据原始帧

  unsigned long lIdx=0;

  RGBSumData* SumData = (RGBSumData*)malloc(1);

  ColorType ct;

  int iY = 0, iX = 0;

  int i=0,j=0;

  BYTE * image1; //RAW数据帧

  image1=(BYTE*)malloc(H*W); //分配空间H*W 1920*1024

  int count=0;

  for(i=0;i

  memcpy(image1+4*count,in+i,4);//按照表2转换,4个字节

  i+=5;//由于是RAW10,需要转换,忽略第5字节

  count++;

  }

  char originName[50];

  sprintf(originName, "%s.raw", name);

  file_w(image1, W * H, originName);//保存 raw data

  BYTE image3[H*W*3];

  BGbGrRProcess(image3,image1);//按照插值规则转换成RGB,

  char rgbOutName[50];

  sprintf(rgbOutName,"%s_out.rgb",name);

  file_w(image3,H*W*3,rgbOutName);

  BYTE * image4=(BYTE*)malloc(W*H*3/2);

  BYTE * yBuffer=image4;

  BYTE * uvBuffer=image4+W*H;

  RGB888ToYVU420SP(image3,yBuffer,uvBuffer,W,H);//转换成YUV,方便工具解析

  char yuvOutName[50];

  sprintf(yuvOutName,"%s_out.yuv",name);

  file_w(image4,H*W*3/2,yuvOutName);

  }

  后续我们重点分析下raw转RGB的实现和调试。

more汽车电子市场动态
more技术专栏
more专家答疑
问:配置高通pmd9607的mpp管脚, 设置为模拟输入一直量不到电压,请教。
答:需要注意,MPP管脚并不是所有MPP管脚都可以配置的,请参考spec说明,你需要配置的pin有没有限制。通常模拟输入的话,还要配置ANA_IN_CTL等寄存器,需要外接模拟量,然后读取该pin的值的寄存器中HKADC值。
问:专家请指导: sensor厂家给的sensor相关资料(chromatix + lib)是支持前置摄像头的,“支持”主要是我这边验证过前置已经点亮。 后置摄像也用同sensor, 但用这套相关资料就点不亮了。 kernel层确认已经PROBE, 同时在/dev下有media0 media1,请协助该如何完成后置的点亮. p.s: 1. 该板后置如果使用其他sensor,可以点亮前后置摄像头; 2. 将后置摄像头拆卸, 可点亮前置, 不拆卸后置,同样可以点亮前置; 3. 如果前置后置一样, 前后置都点不亮, 但kernel层确认都probe, dev下有camera0,camera1,camera2; 4. 拆卸前置,仅后置, 依然无法点亮, kernel已经probe,dev下有camera0,camera1 针对前后置同sensor, 在sensor_init.c增加2sensor, 分别命名为: sensor, sensor_rear,同时在sensor_Libs目录下增加sensor,sensor_rear目录,主要是针对lib部分, 同时对lib中camera_id和position做对应修改(前:CAMERA_1,1,后: CAMERA_0,0) 写的太多, 一句话说明下问题: 前后置同sensor如何同时点亮前后置sensor, 是否需要修改lib中的参数,如何修改?还是其他问题?
答:从现象描述看,可以从以下几点排查。 1,sensor的配置,通常后置sensor 4lanes,而前置sensor 2lanes。换不同型号的sensor可以点亮,说明这些配置可能没有修改 导致一些问题。 2,重点看下,“拆卸前置,仅后置, 依然无法点亮,dev下有camera0,camera1,”,对比下前后置不同型号 枚举dev也是这样,看看HAL层dumpimage检查图像是否正常。 3,camera id枚举冲突,无法区分两颗相同的sensor,tuning参数调用是否正确。
问:请教专家,UE 链路层怎么样才能主动和NODE B断开。 设备和基站没有OTA log,也不太清楚是什么原因导致的连接断开。
答:可以通过AT命令CREG可以离线和在线网络。不知道是否是您需要的情况。 http://blog.chinaunix.net/uid-149881-id-2780145.html
问:有没有懂高通平台root 和解网络锁的高手?
答:eng和userdebug版本上通过adb root。你是否需要如下的方法么, https://zhidao.baidu.com/question/557640730.html
Copyright ©2000-2015 ELECTRONIC ENGINEERING & PRODUCT WORLD. All rights reserved.
京ICP备12027778号-2 北京市公安局备案:1101082052