jjm2473 / ffmpeg-rk

支持rockchip mpp硬件加速编解码的ffmpeg版本。Forked ffmpeg that supports rkmpp decodeing, encoding and rga scaling
https://ffmpeg.org
Other
178 stars 31 forks source link

Help with rga scaling #29

Closed primoitt83 closed 10 months ago

primoitt83 commented 10 months ago

Hi!

I'm trying to downsapling videos using scale_rga filter.

Sample link

cd ~/bbb
curl -k https://test-videos.co.uk/vids/bigbuckbunny/mp4/h264/1080/Big_Buck_Bunny_1080_10s_30MB.mp4 -o Big_Buck_Bunny_1080_10s_30MB_h264.mp4

Here comes some results

export ROCKCHIP_RGA_LOG=1
export ROCKCHIP_RGA_LOG_LEVEL=3

works

1080p to 1080p

ffmpeg -y -c:v h264_rkmpp -i ~/bbb/Big_Buck_Bunny_1080_10s_30MB_h264.mp4 -vf 'scale_rga' -c:v h264_rkmpp  -f mp4 ~/bbb/test.mp4

1080p to 1080p

ffmpeg -y -c:v h264_rkmpp -i ~/bbb/Big_Buck_Bunny_1080_10s_30MB_h264.mp4 -vf 'scale_rga=w=1920:h=1080' -c:v h264_rkmpp  -f mp4 ~/bbb/test.mp4

1080p to 1080p

ffmpeg -y -c:v h264_rkmpp -i ~/bbb/Big_Buck_Bunny_1080_10s_30MB_h264.mp4 -vf 'scale_rga=force_divisible_by=2' -c:v h264_rkmpp  -f mp4 ~/bbb/test.mp4

not working

1080p to 720p

ffmpeg -y -c:v h264_rkmpp -i ~/bbb/Big_Buck_Bunny_1080_10s_30MB_h264.mp4 -vf 'scale_rga=w=1280:h=720' -c:v h264_rkmpp  -f mp4 ~/bbb/test.mp4

rga output on ffmpeg

librga fail to get driver version! Compatibility mode will be enabled.

rga_api version 1.9.1_[3]
<<<<-------- print rgaLog -------->>>>
src->hnd = 0x0 , dst->hnd = 0x0 , src1->hnd = 0x0

src: handle = 0, Fd = 20 ,phyAddr = (nil) ,virAddr = (nil)

dst: handle = 0, Fd = 24 ,phyAddr = (nil) ,virAddr = (nil)

handle_flag: 0x0

src: Fd/handle = 20 , buf = (nil), mmuFlag = 1, mmuType = 0

dst: Fd/handle = 24 , buf = (nil), mmuFlag = 1, mmuType = 0

blend = 0 , perpixelAlpha = 0
scaleMode = 0 , stretch = 1;
rgaVersion = 4.010000  , ditherEn =0 
srcMmuFlag = 1 , dstMmuFlag = 1 , rotateMode = 1 

<<<<-------- rgaReg -------->>>>

render_mode = 0 rotate_mode = 1 in_fence_fd = 0 handle_flag = 0x0
src:[14,0,1fe000],x-y[0,0],w-h[1920,1080],vw-vh[1920,1088],f=10, rd_mode = 0
dst:[18,0,e1000],x-y[0,0],w-h[1280,720],vw-vh[1280,720],f=10, rd_mode = 0
pat:[0,0,0],x-y[0,0],w-h[0,0],vw-vh[0,0],f=0, rd_mode = 0
ROP:[0,0,0],LUT[0]
color:[0,0,0,0,0]
MMU:[1,0,80000521]
mode[0,0,0,0,0]
Full CSC : EN[0] FACTOR[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]
gr_color_x [0, 0, 0]
gr_color_x [0, 0, 0]
[h264_rkmpp @ 0x7605c1d0] Unsupport profile -99, force set to 100
[h264_rkmpp @ 0x7605c1d0] Unsupport level -99, force set to 51
dmesg -w |grep rga
[    3.259716] rga2: Driver loaded successfully ver:4.01
[    3.260240] rga2: Module initialized.
[86087.356100] rga2: unknown ioctl cmd!

journalctl -f |grep rga
kernel: rga2: unknown ioctl cmd!

1080p to 360p

ffmpeg -y -c:v h264_rkmpp -i ~/bbb/Big_Buck_Bunny_1080_10s_30MB_h264.mp4 -vf 'scale_rga=w=640:h=360' -c:v h264_rkmpp  -f mp4 ~/bbb/test.mp4

rga output

[h264_rkmpp @ 0x75c12c70] Decoder noticed an info change (1920x1080), stride(1920x1088), format=0
librga fail to get driver version! Compatibility mode will be enabled.

rga_api version 1.9.1_[3]
ffmpeg: tpp.c:85: __pthread_tpp_change_priority: Assertion `previous_prio == -1 || (previous_prio >= fifo_min_prio && previous_prio <= fifo_max_prio)' failed.
Aborted (core dumped)
journalctl -f |grep rga
kernel: rga2: unknown ioctl cmd!

dmesg -w |grep rga
[    3.259716] rga2: Driver loaded successfully ver:4.01
[    3.260240] rga2: Module initialized
[86409.580265] rga2: unknown ioctl cmd!

720p to 360p

ffmpeg -y -c:v h264_rkmpp -i ~/bbb/Big_Buck_Bunny_720_10s_30MB_h264.mp4 -vf 'scale_rga=w=640:h=360' -c:v h264_rkmpp  -f mp4 ~/bbb/test.mp4

rga output

[h264_rkmpp @ 0x76dc9490] Decoder noticed an info change (1280x720), stride(1280x720), format=0
librga fail to get driver version! Compatibility mode will be enabled.

rga_api version 1.9.1_[3]
<<<<-------- print rgaLog -------->>>>
src->hnd = 0x0 , dst->hnd = 0x0 , src1->hnd = 0x0

src: handle = 0, Fd = 20 ,phyAddr = (nil) ,virAddr = (nil)

dst: handle = 0, Fd = 23 ,phyAddr = (nil) ,virAddr = (nil)

handle_flag: 0x0

src: Fd/handle = 20 , buf = (nil), mmuFlag = 1, mmuType = 0

dst: Fd/handle = 23 , buf = (nil), mmuFlag = 1, mmuType = 0

blend = 0 , perpixelAlpha = 0
scaleMode = 0 , stretch = 1;
rgaVersion = 4.010000  , ditherEn =0 
srcMmuFlag = 1 , dstMmuFlag = 1 , rotateMode = 1 

<<<<-------- rgaReg -------->>>>

render_mode = 0 rotate_mode = 1 in_fence_fd = 0 handle_flag = 0x0
src:[14,0,e1000],x-y[0,0],w-h[1280,720],vw-vh[1280,720],f=10, rd_mode = 0
dst:[17,0,38400],x-y[0,0],w-h[640,360],vw-vh[640,360],f=10, rd_mode = 0
pat:[0,0,0],x-y[0,0],w-h[0,0],vw-vh[0,0],f=0, rd_mode = 0
ROP:[0,0,0],LUT[0]
color:[0,0,0,0,0]
MMU:[1,0,80000521]
mode[0,0,0,0,0]
Full CSC : EN[0] FACTOR[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]
gr_color_x [0, 0, 0]
gr_color_x [0, 0, 0
journalctl -f |grep rga
kernel: rga2: unknown ioctl cmd!

dmesg -w |grep rga
[    3.259716] rga2: Driver loaded successfully ver:4.01
[    3.260240] rga2: Module initialized
[86556.611363] rga2: unknown ioctl cmd!

Any help will be appreciated

Thx

jjm2473 commented 10 months ago

Maybe your RGA driver is too old. What's your SoC model?

primoitt83 commented 10 months ago

It's a RK3229 SoC

dmesg shows the driver version:

rga2: Driver loaded successfully ver:4.01

jjm2473 commented 10 months ago

RK3229 is not supported https://github.com/jjm2473/librga#%E9%80%82%E7%94%A8%E8%8A%AF%E7%89%87%E5%B9%B3%E5%8F%B0

primoitt83 commented 10 months ago

Sad news..

But it's very similar to RK3228.... kernel, drivers, etc are the same..