Toybrick

楼主: jefferyzhang

RK3399Pro入门教程(5)图形加速引擎RGA的使用

jefferyzhang

超级版主

积分
2505
 楼主| 发表于 2019-9-20 18:09:32 | 显示全部楼层
shopping 发表于 2019-9-20 17:07
难怪编译的时候是把它目录下的 cpp 文件给编译了,那 OpenGl 呢,老哥。

ogl请用dnf安装 ocl 包。 mali的 cl和gl是同一个so。
目前我们暂时只能放cl里,系统自带的gl依赖太多,我们还在整理。
回复

使用道具 举报

jefferyzhang

超级版主

积分
2505
 楼主| 发表于 2019-9-20 18:10:08 | 显示全部楼层
rga那些库请看wiki文档,都有说如何安装
回复

使用道具 举报

shopping

中级会员

积分
324
发表于 2019-10-8 15:44:06 | 显示全部楼层
jefferyzhang 发表于 2019-9-20 18:09
ogl请用dnf安装 ocl 包。 mali的 cl和gl是同一个so。
目前我们暂时只能放cl里,系统自带的gl依赖太多,我 ...

老哥,关于这个OpenGL库,如果我直接用 FrameBuffer 显示图片/视频,这样是否可行?即 V4L2+ FrameBuffer方案。
回复

使用道具 举报

jefferyzhang

超级版主

积分
2505
 楼主| 发表于 2019-10-9 10:35:29 | 显示全部楼层
shopping 发表于 2019-10-8 15:44
老哥,关于这个OpenGL库,如果我直接用 FrameBuffer 显示图片/视频,这样是否可行?即 V4L2+ FrameBuffer ...

Linux 4.x以后就改用DRM框架了,没有FB设备了
回复

使用道具 举报

shopping

中级会员

积分
324
发表于 2019-10-9 10:42:09 | 显示全部楼层
本帖最后由 shopping 于 2019-10-9 11:49 编辑
jefferyzhang 发表于 2019-10-9 10:35
Linux 4.x以后就改用DRM框架了,没有FB设备了

好吧,这几天的FB白看了,看样子最后还是得用 OpenGL 来做显示?还有老哥,V4L2它有解码功能这与MPP功能是重合的,如果我用V4L2解码,处理效率区别大吗?
麻烦指教一下,谢谢。
回复

使用道具 举报

jefferyzhang

超级版主

积分
2505
 楼主| 发表于 2019-10-9 17:36:44 | 显示全部楼层
shopping 发表于 2019-10-9 10:42
好吧,这几天的FB白看了,看样子最后还是得用 OpenGL 来做显示?还有老哥,V4L2它有解码功能这与MPP功能是 ...

v4l2没有解码,openGL只是GPU接口,最终绘制还是要走到DRM。
回复

使用道具 举报

shopping

中级会员

积分
324
发表于 2019-10-9 19:31:13 | 显示全部楼层
jefferyzhang 发表于 2019-10-9 17:36
v4l2没有解码,openGL只是GPU接口,最终绘制还是要走到DRM。

老哥,我刚刚又看了一遍代码,V4L2框架调用摄像头输出格式已经是 yuv422 格式了,可以直接保存成 yuv文件的。https://www.cnblogs.com/surpassa ... lab1.html#!comments
回复

使用道具 举报

jefferyzhang

超级版主

积分
2505
 楼主| 发表于 2019-10-10 08:33:29 | 显示全部楼层
shopping 发表于 2019-10-9 19:31
老哥,我刚刚又看了一遍代码,V4L2框架调用摄像头输出格式已经是 yuv422 格式了,可以直接保存成 yuv文件 ...

那是因为你的usb相机出来的格式就是yuv422
回复

使用道具 举报

shopping

中级会员

积分
324
发表于 2019-10-11 11:17:10 | 显示全部楼层
本帖最后由 shopping 于 2019-10-11 11:30 编辑
jefferyzhang 发表于 2019-10-10 08:33
那是因为你的usb相机出来的格式就是yuv422

老哥,用RGA转换格式出现花屏重影的问题。我自己写了个 yuv422 转 BGR 的函数,结果显示正常,RGA sample demo :https://github.com/Jerzha/samples-toybrick-rga .
  1. // rga start

  2.     srcBuffer = (unsigned char*)malloc(sizeof(unsigned char) * BUFFER_SIZE_src);  // yuyv  BUFFER_SIZE_src = MAGE_WIDTH*IMAGE_HEIGHT*2
  3.     dstBuffer = (unsigned char*)malloc(sizeof(unsigned char) * BUFFER_SIZE_det);  // RGB  BUFFER_SIZE_det = MAGE_WIDTH*IMAGE_HEIGHT*3

  4.     RockchipRga *mRga = RgaCreate();
  5.     if (!mRga) {
  6.         printf("create rga failed !\n");
  7.         abort();
  8.     }
  9.     mRga->ops->initCtx(mRga);
  10.     mRga->ops->setSrcFormat(mRga, V4L2_PIX_FMT_YUYV, IMAGE_WIDTH, IMAGE_HEIGHT);
  11.     mRga->ops->setDstFormat(mRga, V4L2_PIX_FMT_BGR24, IMAGE_WIDTH, IMAGE_HEIGHT);

  12.     struct v4l2_buffer enqueue,dequeue ;
  13.     memset(&enqueue, 0, sizeof(enqueue));
  14.     memset(&dequeue, 0, sizeof(dequeue));

  15.     enqueue.type = V4L2_BUF_TYPE_VIDEO_CAPTURE ;
  16.     enqueue.memory = V4L2_MEMORY_MMAP ;

  17.     dequeue.type = V4L2_BUF_TYPE_VIDEO_CAPTURE ;
  18.     dequeue.memory = V4L2_MEMORY_MMAP ;
  19.     while (1)
  20.     {
  21.     // loop start
  22.         // dequeue
  23.         ioctl(fd, VIDIOC_DQBUF, &dequeue) ; // get frame v4l2取缓存帧
  24.         //memcpy((void*)srcBuffer , buffers[dequeue.index].start , dequeue.length);
  25.         srcBuffer = (unsigned char *)buffers[dequeue.index].start;  // 将取出来的缓存帧起始地址赋给 srcBuffer

  26.         mRga->ops->setSrcBufferPtr(mRga, srcBuffer);
  27.         mRga->ops->setDstBufferPtr(mRga, dstBuffer);
  28.         mRga->ops->go(mRga);

  29.         unchar_to_Mat(dstBuffer);  // 将 unsigned char BGR格式转换为 Mat BGR格式
  30.         cv::imshow("image",img);
  31.         cv::waitKey(20);

  32.         //enqueue
  33.         enqueue.index = dequeue.index ;
  34.         ioctl(fd, VIDIOC_QBUF, &enqueue) ;  // enqueue

  35.     }
  36.     ioctl(fd, VIDIOC_STREAMOFF, &type);
  37.     free(srcBuffer);
  38.     free(dstBuffer);

  39.     for(int i=0;i<req.count;i++)
  40.     {
  41.     munmap(buffers[i].start,buffers[i].length);
  42.     }
  43.     return(TRUE);
  44. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

jefferyzhang

超级版主

积分
2505
 楼主| 发表于 2019-10-11 14:28:32 | 显示全部楼层
shopping 发表于 2019-10-11 11:17
老哥,用RGA转换格式出现花屏重影的问题。我自己写了个 yuv422 转 BGR 的函数,结果显示正常,RGA sample  ...

RGA不支持BGR和422,422也是软转的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

产品中心 购买渠道 开源社区 Wiki教程 资料下载 关于Toybrick


快速回复 返回顶部 返回列表