Toybrick

标题: 1808计算棒 如何调用mpp(C/C++) [打印本页]

作者: buyishengun    时间: 2020-2-26 16:01
标题: 1808计算棒 如何调用mpp(C/C++)
本帖最后由 buyishengun 于 2020-3-2 09:00 编辑

1808计算棒要如何调用mpp(C/C++)?
目前还无法成功调用mpp进行h264进行解码
以下是我的相关操作:安装mpp,rga,drm:

使用dnf命令,直接安装
dnf install librockchip_mpp
dnf install librockchip_mpp-devel
dnf install librockchip_mpp-tests


dnf install librockchip_drm
dnf install librockchip_drm-devel

dnf install libdrm
dnf install libdrm-devel

dnf install librockchip_rga-devel

使用命令查看mpp相关信息:
[root@rk1808 inference]# mpi_test
mpi_test: mpi_test start
mpi_test: mpi_test decoder test start
mpi: mpp_create enter ctx 0x7fe8f5c4c0 mpi 0x7fe8f5c4c8
mpi: mpp version: Without VCS info
mpi: mpp_create leave ret 0 ctx 0x1a9673a0 mpi 0x7f97f4d4b0
mpi: mpp_init enter ctx 0x1a9673a0 type 0 coding 0
mpp: unable to create unsupported type 0 coding 0
mpi: mpp_init leave ret -1
mpi_test: mpp_init failed
mpi: mpp_destroy enter ctx 0x1a9673a0
mpi: mpp_destroy leave ret 0
mpi_test: mpi_test failed
[root@rk1808 inference]#

[root@rk1808 inference]# mpp_info_test
mpp_info_test: mpp revision is 0
mpp_info_test: mpp info all:
Without VCS info
mpp_info_test: mpp info revision: -1
mpp_info_test: mpp info date    :
mpp_info_test: mpp info author  : Unknown
[root@rk1808 inference]#

编译mpp自带的例子
cd /usr/share/rockchip_mpp/example/
make
将test.h264放到该目录(确定该test.h264文件是没问题的,是一帧h264 I帧)
执行编译出的应用
# ./mpp_decode
生成的test.nv12文件为空文件
跟踪调试mpp_decode代码
发现frame=mpp_get_frame(&dec);得到的frame为NULL。


自己写的测试程序
参考http://t.rock-chips.com/wiki.php?mod=view&id=57#h1_1
执行到解码图像出队操作:dequeue或者decode后得到的DecFrame永远是NULL


执行dmesg查看:

rk_vcodec: vpu_service_ioctl:2138: error: unknown vpu service ioctl cmd 40086c01












作者: jefferyzhang    时间: 2020-3-2 08:31
test.h264 一起发给我们下
作者: buyishengun    时间: 2020-3-2 09:01
jefferyzhang 发表于 2020-3-2 08:31
test.h264 一起发给我们下

test.h264我上传到楼主层的附件了,里面的yuv是我用ffmpeg解处理的yuv420p数据。
作者: bobby_jiang    时间: 2020-3-2 16:38
在线更新一下librockchip_mpp、librockchip_mpp-devel、librockchip_mpp-tests到最新版本
作者: buyishengun    时间: 2020-3-3 10:23
本帖最后由 buyishengun 于 2020-3-3 10:29 编辑
bobby_jiang 发表于 2020-3-2 16:38
在线更新一下librockchip_mpp、librockchip_mpp-devel、librockchip_mpp-tests到最新版本

我把mpp相关卸载掉,clean all,重新安装mpp,还是编译test程序,还是不行。

[root@rk1808 ~]# dnf install librockchip_mpp-devel librockchip_mpp-tests
Fedora Modular 28 - aarch64                                                                                                                                                         21 kB/s | 159 kB     00:07   
Fedora Modular 28 - aarch64 - Updates                                                                                                                                              149 kB/s | 1.5 MB     00:10   
Fedora 28 - aarch64 - Updates                                                                                                                                                      9.8 kB/s |  27 MB     46:31   
Fedora 28 - aarch64                                                                                                                                                                 27 kB/s |  54 MB     34:08   
RK1808 28 - aarch64                                                                                                                                                                3.3 kB/s |  67 kB     00:20   
Last metadata expiration check: 0:00:01 ago on Mon 02 Mar 2020 09:13:49 PM EST.
Dependencies resolved.
===================================================================================================================================================================================================================
Package                                                   Arch                                        Version                                                    Repository                                  Size
===================================================================================================================================================================================================================
Installing:
librockchip_mpp-devel                                     aarch64                                     1.3.8-1.rockchip.fc28                                      RK1808                                      78 k
librockchip_mpp-tests                                     aarch64                                     1.3.8-1.rockchip.fc28                                      RK1808                                      71 k
Installing dependencies:
librockchip_mpp                                           aarch64                                     1.3.8-1.rockchip.fc28                                      RK1808                                     403 k

Transaction Summary
===================================================================================================================================================================================================================
Install  3 Packages

Total download size: 552 k
Installed size: 2.2 M
Is this ok [y/N]: y
Downloading Packages:
(1/3): librockchip_mpp-tests-1.3.8-1.rockchip.fc28.aarch64.rpm                                                                                                                      14 kB/s |  71 kB     00:05   
(2/3): librockchip_mpp-devel-1.3.8-1.rockchip.fc28.aarch64.rpm                                                                                                                      15 kB/s |  78 kB     00:05   
(3/3): librockchip_mpp-1.3.8-1.rockchip.fc28.aarch64.rpm                                                                                                                            75 kB/s | 403 kB     00:05   
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                                                              102 kB/s | 552 kB     00:05     
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                                                                                           1/1
  Installing       : librockchip_mpp-1.3.8-1.rockchip.fc28.aarch64                                                                                                                                             1/3
  Installing       : librockchip_mpp-devel-1.3.8-1.rockchip.fc28.aarch64                                                                                                                                       2/3
  Installing       : librockchip_mpp-tests-1.3.8-1.rockchip.fc28.aarch64                                                                                                                                       3/3
  Running scriptlet: librockchip_mpp-tests-1.3.8-1.rockchip.fc28.aarch64                                                                                                                                       3/3
  Verifying        : librockchip_mpp-devel-1.3.8-1.rockchip.fc28.aarch64                                                                                                                                       1/3
  Verifying        : librockchip_mpp-1.3.8-1.rockchip.fc28.aarch64                                                                                                                                             2/3
  Verifying        : librockchip_mpp-tests-1.3.8-1.rockchip.fc28.aarch64                                                                                                                                       3/3

Installed:
  librockchip_mpp-devel.aarch64 1.3.8-1.rockchip.fc28                     librockchip_mpp-tests.aarch64 1.3.8-1.rockchip.fc28                     librockchip_mpp.aarch64 1.3.8-1.rockchip.fc28                    

Complete!
[root@rk1808 ~]# cd /usr/share/rockchip_mpp/
[root@rk1808 rockchip_mpp]# cd example/
[root@rk1808 example]# make
g++ mpp_decode.cpp rockchip_mpp.cpp -lrockchip_rga -lrockchip_mpp -lrockchip_drm -I/usr/include/libdrm -o mpp_decode
g++ mpp_encode.cpp rockchip_mpp.cpp -lrockchip_rga -lrockchip_mpp -lrockchip_drm -I/usr/include/libdrm -o mpp_encode
[root@rk1808 example]#
[root@rk1808 example]#
[root@rk1808 example]# ./mpp_decode
mpi: mpp version: Without VCS info
mpp_rt: NOT found ion allocator
mpp_rt: found drm allocator
[root@rk1808 example]#
[root@rk1808 example]# make
g++ mpp_decode.cpp rockchip_mpp.cpp -lrockchip_rga -lrockchip_mpp -lrockchip_drm -I/usr/include/libdrm -o mpp_decode
g++ mpp_encode.cpp rockchip_mpp.cpp -lrockchip_rga -lrockchip_mpp -lrockchip_drm -I/usr/include/libdrm -o mpp_encode
[root@rk1808 example]# ./mpp_decode
mpi: mpp version: Without VCS info
mpp_rt: NOT found ion allocator
mpp_rt: found drm allocator
frame == NULL
[root@rk1808 example]#


frame == NULL是我加上去的,打印mpp_get_frame结果。

使用dmesg查看:
[ 5772.569588] rk_vcodec: vpu_service_ioctl:2138: error: unknown vpu service ioctl cmd 40086c01
[ 6143.788420] rk_vcodec: vpu_service_ioctl:2138: error: unknown vpu service ioctl cmd 40086c01




作者: jefferyzhang    时间: 2020-3-9 09:31
mpp_decode 后面要加参数啊
作者: buyishengun    时间: 2020-3-9 10:06
jefferyzhang 发表于 2020-3-9 09:31
mpp_decode 后面要加参数啊

int main(int argc, char **argv)
{
    int ret;
    /* Input h264 file */
    FILE *in = fopen("test.h264", "r");
    /* Output nv12 file */
    FILE *out = fopen("test.nv12", "w+");

    if(in == NULL)
    {
        fprintf(stderr, "Open file failed\n");
                return -EINVAL;
    }
   
    if(in == NULL || out == NULL)
    {
        fprintf(stderr, "Open file failed\n");
                return -EINVAL;
    }

    ret = mpp_decode(in, out);
exit:
    if(in != NULL)
            fclose(in);
    if(out != NULL)
            fclose(out);

    return ret;
}

这是example里的mpp_decode源码,没说要带参数啊
作者: jefferyzhang    时间: 2020-3-9 10:30
buyishengun 发表于 2020-3-9 10:06
int main(int argc, char **argv)
{
    int ret;

exit:后面的返回值加一些打印调试下,看看ret是多少。
作者: buyishengun    时间: 2020-3-9 13:55
jefferyzhang 发表于 2020-3-9 10:30
exit:后面的返回值加一些打印调试下,看看ret是多少。

ret = 0
看起来也没啥不对的。
作者: buyishengun    时间: 2020-3-10 11:01
jefferyzhang 发表于 2020-3-9 10:30
exit:后面的返回值加一些打印调试下,看看ret是多少。

http://t.rock-chips.com/forum.ph ... ight=mpp&page=2
我在上面论坛的11楼看到一些信息,会不会我现在的状况是一样的,RK1808的VPU是没有打开的?
要怎么看是否有打开,如果没有打开,要怎么打开?
作者: jefferyzhang    时间: 2020-3-10 11:12
buyishengun 发表于 2020-3-10 11:01
http://t.rock-chips.com/forum.php?mod=viewthread&tid=635&extra=&highlight=mpp&page=2
我在上面论坛 ...

只要你计算棒更新是最新的,vpu一定是开的。
计算棒很多客户都量产使用了的。。而且没开的log不是这种。。

如果mppdecode走不通,你可以试试mpp
作者: bobby_jiang    时间: 2020-3-10 14:21
你计算棒的固件升级到最新版本1.4.1版本了吗?
作者: bobby_jiang    时间: 2020-3-10 14:22
你计算棒固件升级到最新的1.4.1版本了吗?
作者: buyishengun    时间: 2020-3-10 14:44
jefferyzhang 发表于 2020-3-10 11:12
只要你计算棒更新是最新的,vpu一定是开的。
计算棒很多客户都量产使用了的。。而且没开的log不是这种。 ...

我试过mpp, 使用decode_put_packet、decode_get_frame,只有第一帧能出yuv数据,后面的就都没数据了,代码没有问题,代码在rk3399(非pro)上已经用很久了。
作者: buyishengun    时间: 2020-3-10 14:46
bobby_jiang 发表于 2020-3-10 14:22
你计算棒固件升级到最新的1.4.1版本了吗?

如何查看固件版本?
[root@rk1808 ~]# cat /etc/redhat-release
Fedora release 28 (Twenty Eight)

这是我查的系统信息。
另外,我有dnf 升级过。
也有烧写http://t.rock-chips.com/portal.p ... 1&product_id=28这上面的固件。
作者: jefferyzhang    时间: 2020-3-10 15:38
buyishengun 发表于 2020-3-10 14:44
我试过mpp, 使用decode_put_packet、decode_get_frame,只有第一帧能出yuv数据,后面的就都没数据了,代 ...

你给的264就只有一帧? 还没带pps和sps,如何能解?
我同事自己测了其他264文件解了几百帧都是正常的
作者: buyishengun    时间: 2020-3-10 15:50
jefferyzhang 发表于 2020-3-10 15:38
你给的264就只有一帧? 还没带pps和sps,如何能解?
我同事自己测了其他264文件解了几百帧都是正常的 ...

我给的264是I帧,有带pps和sps。
我们现在的应用是每次喂进去的都是I帧,都有带sps和pps,这些帧可能是没有关联的,可能是不同rtsp流过来的,这应该没关系的吧。毕竟我们在rk3399上面就是这样做的。
作者: jefferyzhang    时间: 2020-3-10 16:23
buyishengun 发表于 2020-3-10 15:50
我给的264是I帧,有带pps和sps。
我们现在的应用是每次喂进去的都是I帧,都有带sps和pps,这些帧可能是没 ...

我同事测过其他264都是可以解码的,但是你给的这个能解但没出来,所以你们可以测试下:

1. 多给几帧的视频是否正常。
2. 不要用mppdecode这个api,直接使用mpp是否可以解码。
3. 如果以上两点都出不来,但同样代码3399又可以解出来,这种情况你必须要提交一个redmine,这个已经超出我们的能力范围了,必须要通过公司的FAE和bug系统提交给算法部门处理。
作者: buyishengun    时间: 2020-3-11 11:30
jefferyzhang 发表于 2020-3-10 16:23
我同事测过其他264都是可以解码的,但是你给的这个能解但没出来,所以你们可以测试下:

1. 多给几帧的视 ...

问题找到了,我对比了新买的计算棒里面的test.h264文件和我们自己的test.h264文件,发现里面的数据有细微差别。
官方提供的h264文件数据格式为:
00 00 00 01 27 XX XX XX XX XX     SPS
00 00 00 01 28 XX XX XX XX XX     PPS
00 00 00 01 25 XX XX XX XX XX     I帧
00 00 00 01 21 XX XX XX XX XX     P帧

而我们通过live555取rtsp流过来后的h264帧数据格式为:
00 00 00 01 67 XX XX XX XX XX     SPS
00 00 00 01 68 XX XX XX XX XX     PPS
00 00 00 01 65 XX XX XX XX XX     I帧
00 00 00 01 41 XX XX XX XX XX     P帧

我将我们的数据存成前面的那种格式,就可以解码成功了
作者: jefferyzhang    时间: 2020-3-11 11:38
buyishengun 发表于 2020-3-11 11:30
问题找到了,我对比了新买的计算棒里面的test.h264文件和我们自己的test.h264文件,发现里面的数据有细微 ...

解决了就好。。。




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