mirror of
https://github.com/nyanmisaka/ffmpeg-rockchip.git
synced 2026-01-23 23:21:06 +01:00
[PR #6] [CLOSED] HACK: Route v4l2m2m codecs to rkmpp via ENV variable #234
Labels
No labels
bug
enhancement
help wanted
invalid
pull-request
question
upstream
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: starred/ffmpeg-rockchip#234
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/nyanmisaka/ffmpeg-rockchip/pull/6
Author: @hbiyik
Created: 1/10/2024
Status: ❌ Closed
Base:
master← Head:ffmpeg-rockchip-v4l2m2m-routing📝 Commits (1)
ef5fb26HACK: Route v4l2m2m codecs to rkmpp via ENV variable📊 Changes
1 file changed (+22 additions, -0 deletions)
View changed files
📝
libavcodec/allcodecs.c(+22 -0)📄 Description
So this allows firefox (or any other app user v4l2m2m with ffmpeg, vlc?) to import DRMPrime frames from rkmpp* decoders/encoders directly. So it is kind of 0 copy for the browser which is very cool.
I am not proud of the hack since it is in the middle of ffmpeg code but it works. May be there is cleaner way to do this.
How this works: Firefox has enabled v4l2m2m support for raspberry pi, and it uses ffmpeg to communicate with V4l2 interface, Firefox does not ioctl itself, instead just imports the AVCodec, but initially it executes a binary called
v4l2testto query capabilites of a target device. With the env flagFFMPEG_RKMPP_DEC_V4L2M2M=1ffmpeg routes the v4l2 encoders or decoder to rkmpp variants, and with PR https://github.com/nyanmisaka/ffmpeg-rockchip/pull/1 RKMPP codecs provide the DRMPRime frames with HwFramesContext, they do not need to initialized with AVdevice or v4l2device at all. So rkmpp decoders/encoders act as v4l2m2m av codecs.How to test:
/dev/video[n]device, it does not matter what it is, it is only needed for firefox to be fooled./usr/lib/firefox/v4l2testwith below python script. You can do the same with shell as well. It would be a good idea to backup the originalv4l2testbinary. This is how we fool the FF that there is actually a v4l2m2m device where there is notLaunch the firefox with RDD security sandbox disabled, v4l2 routed to mpp as below.
MOZ_DISABLE_RDD_SANDBOX=1 FFMPEG_RKMPP_DEC_V4L2M2M=1 firefoxCurrently only h264 seems to be allowed with that flow, there seems to be VP9 hevc and AV1 or other codecs support but it seems they are blocked somewhere (some config value?). I think this can be tackled somehow and we can have a fully functional browser with HW Decoding / Encoding Enabled.
Above SS is a H264 1080p@60 SS from twitch, there seems to be an offset issue somewhere, see above color displacement, again this can also be tackled.
I am sending this PR not to be merged actually it is quite ugly, but to show the benefits of mainlining, If at least the decoder and encoder of this codec would be mainlined, we could easily PR the firefox to enable other codecs through some configs. Just wanted to show the potential here.
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.