Toybrick

标题: rga转格式图像底部有2行像素数据不对 [打印本页]

作者: appleUncle    时间: 2020-5-14 09:10
标题: rga转格式图像底部有2行像素数据不对
本帖最后由 appleUncle 于 2020-5-14 09:41 编辑

我用的RK3399Pro入门教程(10)RTSP推流介绍中的rtsp推流代码,fedora系统。按照教程做的,推流拉流都很正常,调用RGA转格式,其中YUYV转NV12也是正常的,但是RGB24转NV12出现图像底部有2行像素数据乱码的情况(RGB24是opencv Mat cv8uc3的格式),具体见下图。我试过用RGA将YUYV转成RGB24是正常的,就是将RGB24转NV12出现2行像素乱码,感觉是RGA库转改格式的时候图像底部没有处理好?下图左边是正常RGB24图片,右边是RGB24转NV12后再转回RGB24的图片
[attach]1081[/attach]
下图是填充的纯黑RGB24图片转成NV12推流出去之后接收到的样子
[attach]1080[/attach]

注意底部有2行像素乱码
代码如下:
  1. int frame_size = 640 * 480 * 1.5*sizeof(unsigned char);
  2. unsigned char *frame_nv12 = NULL;
  3. frame_nv12 = (unsigned char *)malloc(frame_size);
  4. cv::Mat tmp= output.clone();

  5. RockchipRga *rga;
  6. rga = RgaCreate();
  7. rga->ops->initCtx(rga);
  8. rga->ops->setDstBufferPtr(rga, frame_nv12);
  9. rga->ops->setSrcBufferPtr(rga,(unsigned char *)tmp.data);
  10. rga->ops->setDstFormat(rga, V4L2_PIX_FMT_NV12, 640, 480);
  11. rga->ops->setSrcFormat(rga, V4L2_PIX_FMT_RGB24, 640, 480);
  12. rga->ops->setRotate(rga, RGA_ROTATE_NONE);
  13. rga->ops->go(rga);
复制代码




作者: appleUncle    时间: 2020-5-14 10:04
我用的size是640*480,高宽都是16对齐的,应该也不是16对齐的问题,那是什么原因呢?
作者: jefferyzhang    时间: 2020-5-14 11:20
转完sleep个几ms再存文件试试。

你的板子是toybrick的么?kernel是我们的么?
作者: appleUncle    时间: 2020-5-14 11:27
jefferyzhang 发表于 2020-5-14 11:20
转完sleep个几ms再存文件试试。

你的板子是toybrick的么?kernel是我们的么?

sleep500 ms试了,还是一样。用的toybrick rk3399PROD板子,官方fedora28固件
作者: jefferyzhang    时间: 2020-5-14 11:28
appleUncle 发表于 2020-5-14 11:27
sleep500 ms试了,还是一样。用的toybrick rk3399PROD板子,官方fedora28固件

其他分辨率会么?
作者: appleUncle    时间: 2020-5-14 13:13
jefferyzhang 发表于 2020-5-14 11:28
其他分辨率会么?

1920*1088测试没问题
作者: appleUncle    时间: 2020-5-14 13:45
jefferyzhang 发表于 2020-5-14 11:28
其他分辨率会么?

1920*1088细看的话底部大概也有1~2个像素是白点,640*480问题还是很明显




欢迎光临 Toybrick (https://t.rock-chips.com/) Powered by Discuz! X3.3