rockchip-linux / mpp

Media Process Platform (MPP) module
472 stars 156 forks source link

在3588上,哪些编码格式是支持的?vp8 为什么不行? #549

Closed HouLingLXH closed 3 months ago

HouLingLXH commented 3 months ago

我尝试了一些编码格式,发现h265和h264可以,但是vp8和vp9都不行, 但是我看文档里好像说vp8可以,这是为什么?

MppEncoder *mpp_encoder = new MppEncoder(); MppEncoderParams enc_params; memset(&enc_params, 0, sizeof(MppEncoderParams)); enc_params.fmt = MPP_FMT_YUV420SP; // 输入的颜色格式为YUV420SP enc_params.type = MPP_VIDEO_CodingHEVC; // h265,成功 // enc_params.type = MPP_VIDEO_CodingAVC; // h264, 成功 // enc_params.type = MPP_VIDEO_CodingVP8; // vp8 失败 // enc_params.type = MPP_VIDEO_CodingVP9; // vp9 失败

HouLingLXH commented 3 months ago

没有解决,firefly 那边没有回复

Liaoyyyy commented 3 months ago

如果是个人开发者,只能通过开发板供应商寻求固件更新了,我司客户的话请到redmine提请帮助。 另,可将firefly的开发板型号,固件版本,固件地址发一个看看。

Liaoyyyy commented 3 months ago

要不这样吧,你将你sdk目录中的以下文件打包发给我:

  1. kernel/drivers/video/rockchip/mpp
  2. arch/arm64/boot/dts/rockchip/rk3588-evb.dtsi
  3. arch/arm64/boot/dts/rockchip/rk3588s.dtsi
HouLingLXH commented 3 months ago

mpp.zip 下面是firefly提供的固件以及相关文档: https://www.t-firefly.com/doc/download/164.html 开发板型号: ROC-RK3588S-PC 固件版本: Ubuntu/Ubuntu20.04 下的几个版本都试过了

Liaoyyyy commented 3 months ago

打包的代码你是根据之前补丁做过修改了吗?

HouLingLXH commented 3 months ago

我对比过,不需要修改,都是对的

Liaoyyyy commented 3 months ago

这是我新编译的固件,但还是不行,因为不知道补丁怎么打.....

Linux version 5.10.160 (nvidia@ubuntu) (kernel commit id: c0c4b1eadb89) (sdk version: rk3588_linux_release_20240313_v1.3.0e) (aarch64-none-linux-gnu-gcc (GNU Toolchain for the A-profile Architecture 10.3-2021.07 (arm-10.29)) 10.3.1 20210621, GNU ld (GNU Toolchain for the A-profile Architecture 10.3-2021.07 (arm-10.29)) 2.36.1.20210621) #1 SMP Tue Mar 19 01:09:14 PDT 2024

你编译的这个固件是哪里下载的请问?

HouLingLXH commented 3 months ago

我是按照这个官方教程进行编译的: https://wiki.t-firefly.com/zh_CN/ROC-RK3588S-PC/linux_compile.html

Liaoyyyy commented 3 months ago

看了下,如果确认烧录了最新编的固件,看了下链接中sdk的代码,确实此前说的那个补丁是已经打上了的,试试jpeg能不能编: su export mpp_enc_debug=0x30 mpi_enc_test -w 1920 -h 1080 -t 8 -n 1 -o /sdcard/test.jpg

之后将/var/log/syslog 下log发来看看。

HouLingLXH commented 3 months ago

输入是什么? jpg? h264?

HouLingLXH commented 3 months ago

$ mpi_enc_test -w 320 -h 240 -t 8 -n 1 -i car320x240.yuv -o out.jpg

Mar 28 15:54:17 firefly org.xfce.ScreenSaver[1170]: Xlib: extension "DPMS" missing on display ":0". Mar 28 15:56:47 firefly org.xfce.ScreenSaver[1170]: message repeated 10 times: [ Xlib: extension "DPMS" missing on display ":0".] Mar 28 15:56:52 firefly mpp[7594]: mpi_enc_utils: cmd parse result: Mar 28 15:56:52 firefly mpp[7594]: mpi_enc_utils: input file name: car320x240.yuv Mar 28 15:56:52 firefly mpp[7594]: mpi_enc_utils: output file name: out.jpg Mar 28 15:56:52 firefly mpp[7594]: mpi_enc_utils: width : 320 Mar 28 15:56:52 firefly mpp[7594]: mpi_enc_utils: height : 240 Mar 28 15:56:52 firefly mpp[7594]: mpi_enc_utils: format : 0 Mar 28 15:56:52 firefly mpp[7594]: mpi_enc_utils: type : 8 Mar 28 15:56:52 firefly mpp[7594]: mpi_enc_test: mpi_enc_test start Mar 28 15:56:52 firefly mpp[7594]: mpp_info: mpp version: d378a28e author: daijh 2023-12-22 update version Mar 28 15:56:52 firefly mpp[7594]: mpi_enc_test: 0x7fa8001960 encoder test start w 320 h 240 type 8 Mar 28 15:56:52 firefly mpp[7594]: mpp_enc: MPP_ENC_SET_RC_CFG bps 288000 [0 : 0] fps [30:30] gop 60 Mar 28 15:56:52 firefly mpp[7594]: mpi_enc_test: chn 0 encoded frame 0 size 18558 qp 80 Mar 28 15:56:52 firefly mpp[7594]: mpi_enc_test: chn 0 encode 1 frames time 2 ms delay 1 ms fps 408.50 bps 4453920 Mar 28 15:56:52 firefly mpp[7594]: mpi_enc_test: mpi_enc_test average frame rate 408.50 Mar 28 15:57:02 firefly org.xfce.ScreenSaver[1170]: Xlib: extension "DPMS" missing on display ":0".

Liaoyyyy commented 3 months ago

输出jpeg图片,可以直接打开的,这个jpeg可以编码说明vepu2是启用了的,vp8e编不了很奇怪啊... 输入 -i 参数可以为空,cpu会画一个yuv给test,再试试vp8e吧: mpi_enc_test -w 1920 -h 1080 -n 100 -t 9

FumasterLin commented 3 months ago

看下ls /proc/mpp_service/

HouLingLXH commented 3 months ago

$ ls /proc/mpp_service/

av1d jpegd jpege-core1 jpege-core3 rkvdec-core1 rkvenc-core1 supports-cmd timing_en version iep jpege-core0 jpege-core2 rkvdec-core0 rkvenc-core0 sessions-summary supports-device vdpu

FumasterLin commented 3 months ago

看下: cat /proc/device-tree/vepu@fdb50000/status

以及你的板载对应的dtsi都发来看下

HouLingLXH commented 3 months ago

$ mpi_enc_test -w 320 -h 240 -t 8 -n 1 -o out.jpg image

$ mpi_enc_test -w 320 -h 240 -n 100 -t 9 -i car320x240.yuv -o a.jpg image

$ mpi_enc_test -w 320 -h 240 -n 100 -t 9 -i car320x240.yuv -o a.webm 得到的a.webm 文件大小是0

HouLingLXH commented 3 months ago

$ cat /proc/device-tree/vepu@fdb50000/status disabled

https://github.com/rockchip-linux/mpp/files/14782590/mpp.zip

FumasterLin commented 3 months ago

https://github.com/rockchip-linux/mpp/files/14782590/mpp.zip 这个不是你的板子dtsi,

HouLingLXH commented 3 months ago

rk3588s.dtsi 不是吗? 那应该在哪找?

FumasterLin commented 3 months ago

或者你直接修改下rk3588.dtsi,把vepu的status改成okay

    vepu: vepu@fdb50000 {
        compatible = "rockchip,vpu-encoder-v2";
        reg = <0x0 0xfdb50000 0x0 0x400>;
        interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>;
        interrupt-names = "irq_vepu";
        clocks = <&cru ACLK_VPU>, <&cru HCLK_VPU>;
        clock-names = "aclk_vcodec", "hclk_vcodec";
        rockchip,normal-rates = <594000000>, <0>;
        assigned-clocks = <&cru ACLK_VPU>;
        assigned-clock-rates = <594000000>;
        resets = <&cru SRST_A_VPU>, <&cru SRST_H_VPU>;
        reset-names = "shared_video_a", "shared_video_h";
        rockchip,skip-pmu-idle-request;
        rockchip,disable-auto-freq;
        iommus = <&vdpu_mmu>;
        rockchip,srv = <&mpp_srv>;
        rockchip,taskqueue-node = <0>;
        rockchip,resetgroup-node = <0>;
        power-domains = <&power RK3588_PD_VDPU>;
        status = "okay";
    };
HouLingLXH commented 3 months ago

我是3588s, 所以修改了rk3588s.dtsi 中相应的 status = "okay"; 就可以了