Toybrick

MPP更新后解码H265图像存在绿边,H264正常

zhuo799154051

中级会员

积分
443
发表于 2021-2-22 14:47:36    查看: 44029|回复: 11 | [复制链接]    打印 | 显示全部楼层
本帖最后由 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

中级会员

积分
443
 楼主| 发表于 2021-2-22 14:53:40 | 显示全部楼层
或者说有什么办法让MPP解码输出16位对齐的图像
回复

使用道具 举报

jefferyzhang

版主

积分
13445
发表于 2021-2-22 14:55:01 | 显示全部楼层
MPP解码后经过RGA裁剪, RGA剪裁部分宽高你是如何获取的? 自己瞎猜的?264 265对齐方式本身就不一样。
mpp有接口可以获取对齐后大小,搜索下论坛帖子
回复

使用道具 举报

zhuo799154051

中级会员

积分
443
 楼主| 发表于 2021-2-22 15:01:18 | 显示全部楼层
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

中级会员

积分
443
 楼主| 发表于 2021-2-22 15:02:09 | 显示全部楼层
jefferyzhang 发表于 2021-2-22 14:55
MPP解码后经过RGA裁剪, RGA剪裁部分宽高你是如何获取的? 自己瞎猜的?264 265对齐方式本身就不一样。
mpp ...

可以的。一句瞎猜就给我盖棺定论了
回复

使用道具 举报

jefferyzhang

版主

积分
13445
发表于 2021-2-22 15:14:26 | 显示全部楼层
zhuo799154051 发表于 2021-2-22 15:02
可以的。一句瞎猜就给我盖棺定论了

你如果265从mpp获取的打印出来是:
coded_width:1920, coded_height: 1080, width: 1920, height: 1080.
那你就是自己瞎猜的。
264是16对齐。
265是256奇数对齐。
你这里的数值不管怎么看都不可能对
回复

使用道具 举报

zhuo799154051

中级会员

积分
443
 楼主| 发表于 2021-2-22 15:15:39 | 显示全部楼层
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

版主

积分
13445
发表于 2021-2-22 15:29:44 | 显示全部楼层
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

注册会员

积分
77
发表于 2021-9-13 18:42:33 | 显示全部楼层
jefferyzhang 发表于 2021-2-22 15:29
用这个RGA库试一下:https://github.com/rockchip-linux/linux-rga
API有变,但应该更好用 ...

请问rga仓库用哪个分支,看到仓库有两个分支?
另外rga升级后对内核版本要求吗?我们需要升级内核吗?
回复

使用道具 举报

jefferyzhang

版主

积分
13445
发表于 2021-9-14 08:49:27 | 显示全部楼层
xiaoyuan129 发表于 2021-9-13 18:42
请问rga仓库用哪个分支,看到仓库有两个分支?
另外rga升级后对内核版本要求吗?我们需要升级内核吗? ...

默认分支im2d。
内核要尽量保持最新,如果出现偏色或者反色,甚至卡死,就是内核版本不匹配
回复

使用道具 举报

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

本版积分规则

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


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