Toybrick

标题: MPP更新后解码H265图像存在绿边,H264正常 [打印本页]

作者: zhuo799154051    时间: 2021-2-22 14:47
标题: MPP更新后解码H265图像存在绿边,H264正常
本帖最后由 zhuo799154051 于 2021-2-22 15:16 编辑

源图像是网络摄像头传入的1080P的H265数据,MPP解码后经过RGA裁剪,显示出来底部存在绿边。
  1.         rga->ops->setSrcFormat(rga, V4L2_PIX_FMT_NV12, frame->coded_width, frame->coded_height);
  2.         rga->ops->setSrcCrop(rga, 0, 0, frame->width, frame->height);
  3.         rga->ops->setSrcBufferPtr(rga, frame->data);
  4.         ret = rga->ops->go(rga);
  5.         printf("coded_width:%d, coded_height: %d, width: %d, height: %d \n", frame->coded_width, frame->coded_height, frame->width, frame->height);
复制代码


上面是裁剪部分的代码,打印结果为coded_width:2304, coded_height: 1080, width: 1920, height: 1080

我把网络摄像头的参数和代码相关部分改成H264,然后重新运行程序。打印结果为coded_width:1920, coded_height: 1088, width: 1920, height: 1080。此时显示的图像正常。

关于H265解码图像异常的情况,版主有什么方法?总不能在RGA裁剪前把图像填充成1088P吧,代码计算量又得提高,且容易导致图像出错。


作者: zhuo799154051    时间: 2021-2-22 14:53
或者说有什么办法让MPP解码输出16位对齐的图像
作者: jefferyzhang    时间: 2021-2-22 14:55
MPP解码后经过RGA裁剪, RGA剪裁部分宽高你是如何获取的? 自己瞎猜的?264 265对齐方式本身就不一样。
mpp有接口可以获取对齐后大小,搜索下论坛帖子
作者: zhuo799154051    时间: 2021-2-22 15:01
jefferyzhang 发表于 2021-2-22 14:55
MPP解码后经过RGA裁剪, RGA剪裁部分宽高你是如何获取的? 自己瞎猜的?264 265对齐方式本身就不一样。
mpp ...
  1. typedef struct _DecFrame {
  2.     MppFrame mppFrame;
  3.     /* Decode format will only be V4L2_PIX_FMT_NV12. */
  4.     __u32 v4l2Format;
  5.     __u32 width;
  6.     __u32 height;

  7.     __u32 coded_width;
  8.     __u32 coded_height;

  9.     int fd;
  10.     void *data;
  11.     size_t size;
  12.     MppBufferGroup frameGroup;
  13.     MppBuffer frameBuf;
  14. } DecFrame;
复制代码

作者: zhuo799154051    时间: 2021-2-22 15:02
jefferyzhang 发表于 2021-2-22 14:55
MPP解码后经过RGA裁剪, RGA剪裁部分宽高你是如何获取的? 自己瞎猜的?264 265对齐方式本身就不一样。
mpp ...

可以的。一句瞎猜就给我盖棺定论了
作者: jefferyzhang    时间: 2021-2-22 15:14
zhuo799154051 发表于 2021-2-22 15:02
可以的。一句瞎猜就给我盖棺定论了

你如果265从mpp获取的打印出来是:
coded_width:1920, coded_height: 1080, width: 1920, height: 1080.
那你就是自己瞎猜的。
264是16对齐。
265是256奇数对齐。
你这里的数值不管怎么看都不可能对
作者: zhuo799154051    时间: 2021-2-22 15:15
jefferyzhang 发表于 2021-2-22 15:14
你如果265从mpp获取的打印出来是:
coded_width:1920, coded_height: 1080, width: 1920, height: 1080.
...

打错了。H265结果是coded_width:2304, coded_height: 1080, width: 1920, height: 1080
作者: jefferyzhang    时间: 2021-2-22 15:29
zhuo799154051 发表于 2021-2-22 15:15
打错了。H265结果是coded_width:2304, coded_height: 1080, width: 1920, height: 1080

用这个RGA库试一下:https://github.com/rockchip-linux/linux-rga
API有变,但应该更好用
作者: xiaoyuan129    时间: 2021-9-13 18:42
jefferyzhang 发表于 2021-2-22 15:29
用这个RGA库试一下:https://github.com/rockchip-linux/linux-rga
API有变,但应该更好用 ...

请问rga仓库用哪个分支,看到仓库有两个分支?
另外rga升级后对内核版本要求吗?我们需要升级内核吗?
作者: jefferyzhang    时间: 2021-9-14 08:49
xiaoyuan129 发表于 2021-9-13 18:42
请问rga仓库用哪个分支,看到仓库有两个分支?
另外rga升级后对内核版本要求吗?我们需要升级内核吗? ...

默认分支im2d。
内核要尽量保持最新,如果出现偏色或者反色,甚至卡死,就是内核版本不匹配
作者: xiaoyuan129    时间: 2021-9-15 15:23
本帖最后由 xiaoyuan129 于 2021-9-15 18:18 编辑
jefferyzhang 发表于 2021-9-14 08:49
默认分支im2d。
内核要尽量保持最新,如果出现偏色或者反色,甚至卡死,就是内核版本不匹配 ...

用mpp解码某款球机265视频流的时候,因为265是256基数对齐,导致读取数据时,有效数据不连续,这样对后处理存在很大的性能瓶颈,请问有没有方法可以将265也配置成16对齐?
作者: robert    时间: 2021-11-9 19:29
xiaoyuan129 发表于 2021-9-15 15:23
用mpp解码某款球机265视频流的时候,因为265是256基数对齐,导致读取数据时,有效数据不连续,这样对后处理存 ...

请问该问题解决了吗?我也出现和你一样的问题,解码H265 1080P码流就出现绿花屏,解码H265 4K码流时无法解出来,也没有见解码器报错。




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