This is an old revision of the document!
Please follow the documentation to upgrade your system to latest version.
The video node for MIPI camera is /dev/video50
.
Follow the steps below to install Gstreamer Encoder Plugin:
sudo apt update sudo apt install gstreamer-aml
Record Video:
gst-launch-1.0 v4l2src device=/dev/video50 io-mode=mmap num-buffers=300 ! video/x-raw,format=NV12 ! amlvenc bitrate=8000 ! h264parse ! qtmux ! filesink location=test_50.mp4
Follow the steps below to install OpenCV:
sudo apt update sudo apt install libopencv-dev python3-opencv
Get Frame via V4l2:
#include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/core/core.hpp> #include <iostream> #include <string> using namespace cv; using namespace std; int main(int argc, char** argv) { int count=100; string str = argv[1]; string res=str.substr(10); VideoCapture capture(stoi(res), CAP_V4L2); capture.set(CAP_PROP_FOURCC, VideoWriter::fourcc('U','Y','V','Y')); capture.set(CAP_PROP_FRAME_WIDTH, 3840); capture.set(CAP_PROP_FRAME_HEIGHT, 2160); while (count) { Mat frame; capture >> frame; if (frame.empty()) { break; } int h = frame.rows; int w = frame.cols; const char *name = "video"; namedWindow(name, 0); imshow(name, frame); waitKey(30); count--; } return 0; }
Get Frame via Gstreamer:
#include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/core/core.hpp> #include <iostream> #include <string> using namespace cv; using namespace std; int main(int argc, char** argv) { int count=100; string str = argv[1]; string gstformat = "NV12"; string gstfile = "v4l2src device=" + str + " ! video/x-raw,format=" + gstformat + ",width=3840,height=2160,framerate=30/1 ! videoconvert ! appsink"; VideoCapture capture(gstfile); while (count) { Mat frame; capture >> frame; if (frame.empty()) { break; } int h = frame.rows; int w = frame.cols; const char *name = "video"; namedWindow(name, 0); imshow(name, frame); waitKey(30); count--; } return 0; }
Compile:
gcc -o mipi mipi-camera.cpp -lopencv_imgproc -lopencv_core -lopencv_videoio -lopencv_imgcodecs -lopencv_highgui -std=c++11 -std=gnu++11 -Wall -std=c++11 -lstdc++ -I/usr/include/opencv4
Test:
./mipi /dev/video50
If you want to use the MIPI camera, you need to enable it in overlays.
vim4n-os08a10
to fdt_overlays
in /boot/dtb/amlogic/kvim4.dtb.overlay.env
to enable OS08A10
vim4n-imx415
to fdt_overlays
in /boot/dtb/amlogic/kvim4.dtb.overlay.env
to enable IMX415
Enable OS08A10
:
$ cat /boot/dtb/amlogic/kvim4.dtb.overlay.env fdt_overlays=vim4n-os08a10
Enable IMX415
:
$ cat /boot/dtb/amlogic/kvim4.dtb.overlay.env fdt_overlays=vim4n-imx415
And then reboot to take effect.
The video node is /dev/media0
.
You can get the test source code here: https://github.com/numbqq/v4l2_media_test
Download and build the test source code:
$ git clone https://github.com/numbqq/v4l2_media_test $ cd v4l2_media_test $ git checkout e0482794337c01935593a91b621f9c42123cf175 $ g++ v4l2_test_raw.cpp -o v4l2_test_raw -Wall -Wno-int-to-pointer-cast -Wno-pointer-to-int-cast -pthread -fPIE -lispaml -ldl -lmediaAPI -ltuning -lm -fPIC -D_FORTIFY_SOURCE=2 -O3 $ ls v4l2_test_raw v4l2_test_raw
$ git clone https://github.com/numbqq/v4l2_media_test $ cd v4l2_media_test $ g++ v4l2_test_raw.cpp -o v4l2_test_raw -Wall -Wno-int-to-pointer-cast -Wno-pointer-to-int-cast -pthread -fPIE -lispaml -ldl -lmediaAPI -ltuning -llens -lm -fPIC -D_FORTIFY_SOURCE=2 -O3 $ ls v4l2_test_raw v4l2_test_raw
Test:
$ ./v4l2_test_raw -p 0 -n 10 -m /dev/media0
It will capture 10 frames to file /tmp/dst_mif_0.yuv
.
Preview the file:
$ ffplay -f rawvideo -pixel_format nv21 -video_size 3840x2160 /tmp/dst_mif_0.yuv