OKMX8MM-C Development Board & Audio Function Interfaces

OKMX8MM-C is a development board designed by Forlinx based on NXP's iMX8M Mini quad-core 64-bit processor, with a main frequency of up to 1.8GHz and a wide range of audio interfaces, including I2S, AC97, TDM, PDM and SPDIF. While performance and calculation are greatly improved, the system is running more smoothly.

△ OKMX8MM-C Development Board

The OKMX8MM-C development board focuses on providing an excellent video and audio experience, with the audio and video part of the application layer software using Gstreamer, while the video section has a video processing unit VPU, both of which support hardware codecs.

△ Hardware Codec Parameter Table

Let's feel the OKMX8MM-C development board's processing power in audio and video.

1. Play with the player

◾ use the Gplay player

Gplay is a Gstreamer-based audio-visual player that automatically selects the right plug-in for audio and video playback based on hardware, and is easy to run.

$ gst-play-1.0 /home/forlinx/video/1080p_30fps_h265.mp4

◾ play audio and video using gst-launch

gst-launch is a debugging tool commonly used by developers during the development phase, and it is more flexible and, of course, more complex to use than Gplay.

Play audio only:

$ gst-launch-1.0 filesrc location=/home/forlinx/audio/test.mp3 ! id3demux ! queue !

mpegaudioparse ! decodebin ! audioconvert ! audioresample ! pulsesink

Play video only:

$ gst-launch-1.0 filesrc location=/home/forlinx/video/1080p_30fps_h265.mp4 typefind=true !

video/quicktime ! aiurdemux ! queue max-size-time=0 ! vpudec ! imxvideoconvert_g2d !

video/x-raw, format=RGB16, width=1024, height=600 ! waylandsink

Play audio and video at the same time:

$ gst-launch-1.0 filesrc location=/home/forlinx/video/1080p_30fps_h265.mp4 typefind=true ! video/quicktime ! aiurdemux name=demux demux. ! queue max-size-buffers=0 max-size-time=0 ! vpudec ! imxvideoconvert_g2d ! video/x-raw, format=RGB16, width=1024, height=600 ! waylandsink demux. ! queue max-size-buffers=0 max-size-time=0

2.Video hard-coded

◾ H264 hard-coded

Encode YUV420 video as H264 video:

$ gst-launch-1.0 filesrc location=/home/forlinx/video/yuv420_p352x288.yuv ! videoparse format=2

width=352 height=288 ! video/x-raw,width=352,height=288 ! vpuenc_h264 ! queue !

h264parse ! qtmux ! filesink location=yuv2h264.mp4

Play the encoded H264 video:

$ gst-launch-1.0 filesrc location=yuv2h264.mp4 typefind=true ! video/quicktime ! aiurdemux !

queue max-size-time=0 ! vpudec ! waylandsink

You can see the video playing on the screen.

△ Pictured is a screenshot from a scenario audio file

◾ VP8 hard-coded

Encode YUV420 video as VP8 video:

$ gst-launch-1.0 filesrc location=/home/forlinx/video/yuv420_p352x288.yuv ! videoparse format=2

width=352 height=288 ! video/x-raw,width=352,height=288 ! vpuenc_vp8 ! queue ! qtmux !

filesink location=yuv2vp8.mkv

Play coded VP8 video:

$ gst-launch-1.0 filesrc location=yuv2vp8.mkv ! qtdemux ! queue ! vpudec ! waylandsink

you can see the video playing on the screen.

△ Pictured is a screenshot from a scenario audio file

3.Video hard decode

◾ H264 decoding

Decode and play H264 video files:

$ gst-launch-1.0 filesrc location=/home/forlinx/video/1080p_60fps_h264.mp4 typefind=true !

video/quicktime ! aiurdemux ! queue max-size-time=0 ! vpudec ! imxvideoconvert_g2d !

video/x-raw, format=RGB16, width=1024, height=600 ! waylandsink

Decode and play H264 video files (with audio):

$ gst-launch-1.0 filesrc location=/home/forlinx/video/1080p_60fps_h264.mp4 typefind=true !

video/quicktime ! aiurdemux name=demux demux. ! queue max-size-buffers=0

max-size-time=0 ! vpudec ! imxvideoconvert_g2d ! video/x-raw, format=RGB16, width=1024,

height=600 ! waylandsink demux. ! queue max-size-buffers=0

max-size-time=0 ! decodebin ! audioconvert ! audioresample ! pulsesink

△ Pictured is a screenshot from a scenario audio file

◾ H265 decoding

Decode and play H265 video files:

$ gst-launch-1.0 filesrc location=/home/forlinx/video/1080p_30fps_h265.mp4 typefind=true !

video/quicktime ! aiurdemux ! queue max-size-time=0 ! vpudec ! imxvideoconvert_g2d !

video/x-raw, format=RGB16, width=1024, height=600 ! waylandsink

Decode and play H265 video files (with audio):

$ gst-launch-1.0 filesrc location=/home/forlinx/video/1080p_30fps_h265.mp4 typefind=true !

video/quicktime ! aiurdemux name=demux demux. ! queue max-size-buffers=0

max-size-time=0 ! vpudec ! imxvideoconvert_g2d ! video/x-raw, format=RGB16, width=1024,

height=600 ! waylandsink demux. ! queue max-size-buffers=0 max-size-time=0

! decodebin ! audioconvert ! audioresample ! pulsesink

△ Pictured is a screenshot from a scenario audio file

◾ VP8 decoding

Decode and play VP8 video files:

$ gst-launch-1.0 filesrc location=/home/forlinx/video/1080p_30fps_vp8.webm typefind=true !

video/x-matroska ! aiurdemux ! queue max-size-time=0 ! vpudec ! imxvideoconvert_g2d !

video/x-raw, format=RGB16,width=1024, height=600 ! waylandsink

Decode and play VP8 video files (with audio):

$ gst-launch-1.0 filesrc location=/home/forlinx/video/1080p_30fps_vp8.webm typefind=true !

video/x-matroska ! aiurdemux name=demux demux. ! queue max-size-buffers=0

max-size-time=0 ! vpudec ! imxvideoconvert_g2d ! video/x-raw, format=RGB16,width=1024, height=600 ! waylandsink demux. ! queue max-size-buffers=0 max-size-time=0 ! decodebin ! audioconvert ! audioresample ! pulsesink

△ Pictured is a screenshot from a scenario audio file

◾ VP9 decoding

Decode and play VP9 video files:

$ gst-launch-1.0 filesrc location=/home/forlinx/video/1080p_30fps_vp9.webm typefind=true !

video/x-matroska ! aiurdemux ! queue max-size-time=0 ! vpudec ! imxvideoconvert_g2d !

video/x-raw, format=RGB16,width=1024, height=600 ! waylandsink

Decode and play VP9 video files (with audio):

$ gst-launch-1.0 filesrc location=/home/forlinx/video/1080p_30fps_vp9.webm typefind=true !

video/x-matroska ! aiurdemux name=demux demux. ! queue max-size-buffers=0

max-size-time=0 ! vpudec ! imxvideoconvert_g2d ! video/x-raw, format=RGB16,width=1024,

height=600 ! waylandsink demux. ! queue max-size-buffers=0 max-size-time=0

! decodebin ! audioconvert ! audioresample ! pulsesink

OKMX8MM-C development board is unique in the audio-visual experience, with high-performance audio and video processing capabilities, as well as 7.1-channel sound output and ring-wheat input for hi-fi music systems and speech recognition applications.