Mali-G610 HW decode/encode

Hello,
Since Edge2 has only been released a couple of weeks ago, there isn’t much information about the hardware accelerated video decode/encode routines, so I thought it would be a good starting point to create this forum thread.

As stated in official description of the board, device boasts a Mali-G610 GPU which supports 8K@60fps decoding and 8K@30fps (H.265/H.264) encoding.
Encoding one or multiple video streams is extremely convenient if not vital for any tipe of automation and having easy support for such hardware feature would greatly increase the value of the device.

For most high-end applications GStreamer would most likely be used, but as this device is often used for prototyping and testing FFmpeg support would allow for easier setup and testing.

If anyone have any experience in HW API’s, GPU drivers or would like to see HW accelerated video decode/encode on this device, feel free to chime in!

Hardware decoding with GStreamer already supported.

1 Like

Cool! Could we get an example gst-launch line for testing?
I assume the required module comes precompiled with the official Ubuntu installation, right?

Hello @Frank

Please provide the gstreamer pipe.

Hi!
I’ve tried some more gst hardware decoders, but none of them seem to work.
Can someone point me to the correct decoder and/or encoder plugin for h264/h265?

Thanks

@Jezaus.Tevas

gst-launch-1.0 filesrc location=./bbb2.h264 ! h264parse ! mppvideodec ! video/x-raw,format=NV12 ! filesink location=bbb3.264

Thanks, @Frank!
mppvideodec decoder works great. I have also tested mpph264enc and mpph265enc, and have some issues with them.

  • mpph264enc seems to always output 30fps stream, regardless of the input framerate or videorate filter,
  • cpu usage keeps creeping up during encoding process (starts at around 2-3%, reaches 5-6% after around 5 minutes of encoding)
  • sometimes pipeline will hang before or on first keyframe (1-2 seconds after start of transcoding)
  • it also has a weird bug where sometimes it will encode some random garbage blocks that seem to contain data of old frames onto new ones

Have you ever encountered similar issues and how can we combat this?

Thank You

Regarding cpu usage, mppvideodec arm-afbc=true seems to fix the issue

While helping with cpu usage, this parameter causes some of the input sources to output only green frames.

Need to check, how about the h265 encoding?

Both for h264 and h265?

After some testing today I can confirm h265 encoder does also only output 30fps stream, also has the same issue where some sources will not roll over 2 seconds mark, but it does not seem to have the blocky glitch behaviour where old frame blocks are being shown on random parts of the video.

I also experimented a bit with decoder, as I thought that the stream may be stopping there, but after swaping mppvideodec to decodebin to avdec_h264 the issue persists, pipeline will preroll normally, but will stop before reaching 2 seconds of runtime and will just hang there indefinitely