...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
Introduction
This document is about the VC8000 video codec used with V4L2 on the C3V platform.
Panel | ||||||
---|---|---|---|---|---|---|
| ||||||
Before use, please ensure you already know how to use the buildroot and compile the C3V project. |
Environment
This feature needs to make some changes to GStreamer and FFmpeg source code to adapt to the v4l2 codec interface and we will provide the patches for the changes. And the kernel also needs to do some config to support the VC8000 video codec V4L2 driver.
Get the patches
The C3V project source code and the patches of the GStreamer and FFmpeg can be obtained from GitHub.
The gstreamer patch files are in path “code_root/linux/rootfs/initramfs/buildroot/package/gstreamer1” .
The ffmpeg patch files are in path “ code_root/linux/rootfs/initramfs/buildroot/package/ffmpeg” . If your GitHub has not updated the patches yet, you can also use the file provided below:
📎gst1-plugins-good-1.20.1.diff
Config
Patch files will be applied automatically during process of building buildroot. If you just want to apply patch without rebuild action of buildroot, you can take reference to below steps.
Apply the patches
Here we assume that you have already configured GStreamer and FFMPEG in the buildroot and have built it successfully.
GStreamer
Apply the gst1-plugins-good-1.20.1.diffto <buildroot>/output/build/gst1-plugins-good-1.20.1/by the command:
Code Block |
---|
patch -p1 < gst1-plugins-good-1.20.1.diff |
...
Code Block | ||
---|---|---|
| ||
make gst1-plugins-good-rebuild |
The modified library is libgstvideo4linux2.so.
FFmpeg
Apply the ffmpeg-4.4.2.diff to <buildroot>/output/build/ffmpeg-4.4.2/ by command:
Code Block | ||
---|---|---|
| ||
patch -p1 < ffmpeg-4.4.2.diff |
...
Code Block | ||
---|---|---|
| ||
make ffmpeg-rebuild |
The modified library is libavcodec.so*.
Panel | ||||||
---|---|---|---|---|---|---|
| ||||||
If can not find the directory in the buildroot, please check the package on the menuconfig and reconfigure it. |
After the build, copy the modified libraries to the C3V master rootfs.
Kernel support
Run the command make kconfig
on the C3V master to configure the kernel.
stack frames warn size
Kernel hacking > Compile-time checks and compiler options
...
video hardware codec driver
...
Then rebuild the C3V master and boot the platform.
Use
Here just introduce the basic usage with default parameters for H.264 and JPEG. If you need to change the codec parameters, please follow the usage of GStreamer and FFmpeg.
V4L2 Sample
Test sample(please decompress it for use):
📎v4l2
View file | ||
---|---|---|
|
This test needs a YUV source file, you can use the GStreamer to generate one:
...
The command will encode the file 1080p.yuv to a file called stream.h264.
...
The file can be played by PC tools like PotPlayer and VLC media player.
...
The command will decode the file stream.h264 to a file called test.yuv.
...
The file can be played by PC tools like Elecard YUV viewer and YuvEye.
Panel | ||||||
---|---|---|---|---|---|---|
| ||||||
Due to the driver's 16-byte alignment of the YUV, the height of the YUV output from the 1080p decode is 1088. However, GStreamer and FFmpeg have undergone internal processing, so the final output is still 1080. |
GStreamer
H.264 Encode
Fake live stream:
...
Code Block |
---|
gst-launch-1.0 -v filesrc location=1080p.jpg ! jpegparse ! v4l2jpegdec ! "video/x-raw,colorimetry=bt601" ! filesink location=og_1080p.yuv |
...
FFmpeg
H.264 Encode
Code Block |
---|
ffmpeg -benchmark -y -pix_fmt nv12 -s 1920x1080 -i 1080p.yuv -b:v 5242880 -vcodec h264_v4l2m2m -vframes 100 ffout.h264 |
...