Toybrick

标题: rkmpp解码1920*1080 mjpeg视频会出现彩带现象 [打印本页]

作者: adminrootadmin    时间: 2025-5-30 16:21
标题: rkmpp解码1920*1080 mjpeg视频会出现彩带现象
### 背景

rkmpp版本:1.0.9

使用ffmpeg生成mjpeg格式的视频:
  1. ffmpeg -f v4l2 -video_size 1920x1080 -pix_fmt mjpeg -i /dev/video0 -c:v copy -pix_fmt yuv420sp ~/tmp/mjpeg.mjpeg
复制代码


使用rkmpp自带的mpi_dec_test将mjpeg格式的视频解码为yuv格式的视频:
  1. mpi_dec_test -i ~/tmp/mjpeg.mjpeg -w 1920 -h 1080 -t 8 -f 0 -o yuv.yuv
复制代码

### 问题描述

生成的yuv.yuv,使用YUView软件查看,图像上方出现半透明彩带(绿色和粉色渐变),占用16行像素。

### 尝试过的解决方法

* 使用1920*1080和800*600分辨率的mjpeg视频(分辨率不是16位对齐的),解码后会出现上述问题。使用1280*720分辨率(分辨率是16位对齐),解码后画面正常。怀疑是对齐导致。


没有修改过原版mpp代码,直接使用mpi_dec_test。


作者: adminrootadmin    时间: 2025-5-30 16:28
[attach]3143[/attach]


[attach]3144[/attach]

附上yuv文件和YUView实际看到的图像


作者: jefferyzhang    时间: 2025-5-30 18:16
本帖最后由 jefferyzhang 于 2025-5-30 18:17 编辑

一眼看过去你这可能出来的是1088但你按1080显示了,彩带是UV部分0的值,你数下应该是8个像素宽。
或者你按1088宽度看下这张图
作者: adminrootadmin    时间: 2025-6-3 09:43
jefferyzhang 发表于 2025-5-30 18:16
一眼看过去你这可能出来的是1088但你按1080显示了,彩带是UV部分0的值,你数下应该是8个像素宽。
或者你按1 ...

感谢给出的建议。我尝试按照1088的宽度显示,但实际不行,原因是yuv.yuv文件大小为3110400字节(格式为YUV420SP,计算得出1920*1080*1.5=3110400)。
作者: jefferyzhang    时间: 2025-6-4 09:50
adminrootadmin 发表于 2025-6-3 09:43
感谢给出的建议。我尝试按照1088的宽度显示,但实际不行,原因是yuv.yuv文件大小为3110400字节(格式为YU ...

这个对齐问题会在你代码逻辑中就搞错了,比如你喂的参数就写成了-h 1080,出来的yuv当然就是那个尺寸,你改成-h 1088试一下。或者-w -h不要写,mjpeg是自带头部信息的,不需要强制指定
作者: adminrootadmin    时间: 7 天前
jefferyzhang 发表于 2025-6-4 09:50
这个对齐问题会在你代码逻辑中就搞错了,比如你喂的参数就写成了-h 1080,出来的yuv当然就是那个尺寸,你 ...

经过对比发现,同样的mjpeg.mjpeg文件、同样的参数使用mpi_dec_test,使用mpp1.0.9画面会出现彩条,使用mpp1.0.8画面正常。

另外,通过查看代码,mpi_dec_test接收的参数“-w -h”应该只会影响“OUTPUT_FRAME”的buffer大小。

没有继续深入代码研究,不知道是什么原因造成的。我暂时回退到1.0.8版本使用。

谢谢你的帮助。
作者: jefferyzhang    时间: 7 天前
您能否把这个有问题的mjpeg文件一起发上来,
1.0.9相对1.0.8不应该会多这种问题,毕竟这块代码没有涉及到
作者: adminrootadmin    时间: 7 天前
jefferyzhang 发表于 2025-6-6 15:33
您能否把这个有问题的mjpeg文件一起发上来,
1.0.9相对1.0.8不应该会多这种问题,毕竟这块代码没有涉及到 ...

由于论坛限制上传文件的大小,我重新生成了mjpeg和yuv文件,与之前上传的文件没有关联。

分别进入mpp1.0.8和mpp1.0.9里面的test二进制目录,分别执行(在执行之前,已经清除原来版本的mpp并重新安装)下面的命令:
  1.   ./mpi_dec_test -i ~/tmp/mjpeg.mjpeg -w 1920 -h 1080 -t 8 -f 0 -o yuv.yuv
复制代码

分别得到yuv_mpp1.0.8.yuv和yuv_mpp1.0.9.yuv(为了好区分,名称重新命名)(由于论坛上传限制,若需要这两个文件,改天可上传)。

使用YUView分别查看图片(参数设置:width=1920,height=1080,颜色空间为nv12),观察到:yuv_mpp1.0.8.yuv正常,yuv_mpp1.0.9.yuv上方有彩条。

[attach]3149[/attach]







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