VDEC解码h265格式文件报错

固件类型:官方提供的固件
固件文件名称:/home/lyz/fouraibox/rv1126_rv1109_linux_release_20
固件下载地址:百度网盘 请输入提取码
Log日志:vdec_h265.log


1.官方提供的demo解码H265的文件报错,然后保存下来的nv12数据也是异常的,任务紧急,帮忙看一下吧,谢谢啦
如图:image.png

tchip_askquestions
test.h265 (681 KB)
vdec_h265.log (11.5 KB)

这个h265的文件的分辨率是1920*1080的,但是解码的时候就成了
[RKMEDIA][VDEC][Info]:MppDec Info change get, 1920x1080 in (2304x1080)

lyz 发表于 2022-5-6 17:52
这个h265的文件的分辨率是1920*1080的,但是解码的时候就成了
[RKMEDIA][VDEC]:MppDec Info change get, 1 …

你说的保存NV12数据是异常的,这只是个解码demo,没有保存NV12的操作啊

是没有保存nv12的操作,我自己添加了一下写的操作长度为wh3/2。这样,你可以试一下1080P分辨率下的h265解码,解码流程能过去,解码出来的nv12数据是异常的

附上我修改过的rkmedia_vdec_test.c
命令行执行为 ./rkmedia_vdec_test -w 1920 -h 1080 -i /userdata/rv1126_milayer_firefly/src/test.h265 -t H265

打印:
[RKMEDIA][VDEC][Info]:MppDec Info change get, 1920x1080 in (2304x1080)
Get Frame:ptr:(nil), fd:-1, size:0, mode:3, channel:0, timestamp:0, ImgInfo:<wxh 1920x1080, fmt 0x4>
#Send packet(0x44b60, 4096Bytes) to VDEC[0].
Get Frame:ptr:0x9f9ba000, fd:17, size:3732480, mode:3, channel:0, timestamp:0, ImgInfo:<wxh 1920x1080, fmt 0x4>
11111111111111111
#Send packet(0x44b60, 4096Bytes) to VDEC[0].
#Send packet(0x44b60, 4096Bytes) to VDEC[0].
mpp[2036]: H265_PARSER_REF: Could not find ref with POC 30
#Send packet(0x44b60, 4096Bytes) to VDEC[0].
[RKMEDIA][VDEC][Info]:Received a errinfo frame.
#Send packet(0x44b60, 4096Bytes) to VDEC[0].
[RKMEDIA][VDEC][Info]:Received a errinfo frame.
#Send packet(0x44b60, 4096Bytes) to VDEC[0].
[RKMEDIA][VDEC][Info]:Received a errinfo frame.
#Send packet(0x44b60, 4096Bytes) to VDEC[0].
[RKMEDIA][VDEC][Info]:Received a errinfo frame.
22222222222222
rkmedia_vdec_test.c (7.11 KB)

lyz 发表于 2022-5-7 14:44
附上我修改过的rkmedia_vdec_test.c
命令行执行为 ./rkmedia_vdec_test -w 1920 -h 1080 -i /userdata/rv1 …

解码是正常的,你写的程序不对。你把图片导出到电脑查看。预览是正常的,有一块是绿色的。

ffplay -f rawvideo -video_size 2304x1080  -pixel_format nv12 firefly.nv12

1.解码程序我只添加了保存的模块,其它模块都没动,哪里不对呢,请指正一下吧
2.h265文件的分辨率是1080P的,为啥解码完之后成了23041080的呢,然后必须以23041080的显示分辨率显示nv12正常呢

[RKMEDIA][VDEC][Info]:MppDec Info change get, 1920x1080 in (2304x1080) 1920 是 width 像素分辨率,2304 是 stride 单位是字节数据长度,保存文件应该用接口读取 frame 的size 然后写入,预览用 1920x1080 分辨率

1.同样的demo程序用1080P的h264编码格式文件解码出来的nv12数据,以1920*1080的分辨率显示出来正常,没有多余的绿色
2.那官方的解码模块如果遇到1080P的h265还需要特殊处理吗,我觉得这样的SDK明显是不太合理吧

板蓝根 发表于 2022-5-7 15:33
[RKMEDIA][VDEC]:MppDec Info change get, 1920x1080 in (2304x1080) 1920 是 width 像素分辨率,2304 是 s …

    FILE *fp = fopen ("./firefly.nv12", "wb");
    fwrite(RK_MPI_MB_GetPtr(mb), 1, RK_MPI_MB_GetSize(mb), fp);
    fclose(fp);

保存的时候确实使用RK_MPI_MB_GetSize(mb)这个写的长度,然后预览用19201080有问题,以23041080没问题呢

板蓝根 发表于 2022-5-7 15:33
[RKMEDIA][VDEC]:MppDec Info change get, 1920x1080 in (2304x1080) 1920 是 width 像素分辨率,2304 是 s …

Get Frame:ptr:0x9f9ba000, fd:17, size:3732480, mode:3, channel:0, timestamp:0, ImgInfo:<wxh 1920x1080, fmt 0x4>
刚发现RK_MPI_MB_GetSize(mb)的长度就是230410803/2,你们的sdk库是否需要做一下优化

我也是用MPP解码H264是正常的,解码H265跟你的情况一样?请问你怎么解决这个问题的。