Toybrick

标题: h264视频流解码后显示有条纹的异常 [打印本页]

作者: cxjrk    时间: 2020-6-8 15:47
标题: h264视频流解码后显示有条纹的异常
用mpp库解码h264视频流,发现部分分辨率出现上边沿有条纹的异常,后面通过分析,可能是部分分辨率(1920*1080、2592*1944)视频流解码出来图片帧的UV的位置与实际需求不一样,后面发现,解码后的图片帧明亮度Y的行数是16对齐,如果视频流分辨中heigh值如果不是16对齐的话,显示经过rga处理后显示的bgr图片就会出现上边沿条纹问题,我在获取yuv帧后,将uv数据向前偏移,使得uv数据在内存位置上与y的位置连续,如此,之前条纹的问题解决。我是想在这里求证一下,我的分析是否正确

作者: jefferyzhang    时间: 2020-6-8 16:21
解码出来的都是16对齐的,但是解码出来是有参数会告诉你实际buffer宽高大小的,需要用rga去裁一下而已。。
你说的基本上思路是对的。
作者: cxjrk    时间: 2020-6-8 16:38
jefferyzhang 发表于 2020-6-8 16:21
解码出来的都是16对齐的,但是解码出来是有参数会告诉你实际buffer宽高大小的,需要用rga去裁一下而已。。
...

好的,是哪里的参数呢
作者: jefferyzhang    时间: 2020-6-8 16:44
cxjrk 发表于 2020-6-8 16:38
好的,是哪里的参数呢

自己看下sample
作者: cxjrk    时间: 2020-6-10 10:03
jefferyzhang 发表于 2020-6-8 16:44
自己看下sample

好的,参数我看到了,现在有一个问题,我解h265的时候,发现实际buffer的宽和分辨率宽不一样,我想跟您这边确认下,就是实际buffer宽高有什么规律吗,比如高16对齐的,我需要如何裁剪,然后帧buffer大小是如何计算的,谢谢。
作者: jefferyzhang    时间: 2020-6-10 10:17
cxjrk 发表于 2020-6-10 10:03
好的,参数我看到了,现在有一个问题,我解h265的时候,发现实际buffer的宽和分辨率宽不一样,我想跟您这 ...

也是通过出来的buffer获取到实际宽高。这个规律不好解释,265的4k视频是256异或对齐的,1080p是16对齐的。具体可以看mpp源码。直接去获取最简单了,没必要去猜
作者: cxjrk    时间: 2020-6-10 10:23
jefferyzhang 发表于 2020-6-10 10:17
也是通过出来的buffer获取到实际宽高。这个规律不好解释,265的4k视频是256异或对齐的,1080p是16对齐的 ...

好的,那我去看下
作者: jefferyzhang    时间: 2020-6-10 10:25
实际宽高:
RK_U32 width = mpp_frame_get_width(mppFrame);
RK_U32 height = mpp_frame_get_height(mppFrame);

对齐后的宽高:
RK_U32 h_stride = mpp_frame_get_hor_stride(mppFrame);
RK_U32 v_stride = mpp_frame_get_ver_stride(mppFrame);
作者: cxjrk    时间: 2020-6-10 15:11
jefferyzhang 发表于 2020-6-10 10:25
实际宽高:
RK_U32 width = mpp_frame_get_width(mppFrame);
RK_U32 height = mpp_frame_get_height(mppFra ...

谢啦,不过我rga没用起来,一直报错,不过我自己写了一个接口,用软裁剪方式去裁剪解码后的yuv图像,h265解码成功,显示。

作者: cxjrk    时间: 2020-6-10 15:35
用了软裁剪,cpu跑飞了,现在还是要研究下rga裁剪怎么用
作者: cxjrk    时间: 2020-6-11 16:21
rga裁剪成功用上,cpu占用率直线下降,多问一句,如果目的地址用drm,cpu占用率是否会继续下降
作者: yangpengfei    时间: 2020-12-9 10:23
针对有些场景的纯色画面1920*1080,使用264编码后的码流用软解或者elecard解码出来的图像是正确的,使用mpi_dec_teset解出来画面正常就是少帧,自己照着sample写的demo,都一帧码流,取一帧数据, 在mpp_frame_deinit(&frame);释放内存的话会在解码后面几帧是y分量底下8像素高出现错误的颜色。如果不使用mpp_frame_deinit画面就全部正常,但内存泄漏。这种问题有什么方法可以解决吗?




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