This is an old revision of the document!
Please follow the documentation to upgrade your system to latest version.
You can find the video nodes from the table below.
Video Node | |
---|---|
CAM1 | /dev/video33 |
CAM2 | /dev/video24 |
CAM3 | /dev/video42 |
Record video from CAM1
:
gst-launch-1.0 v4l2src device=/dev/video33 io-mode=mmap num-buffers=300 ! mpph264enc ! h264parse ! qtmux ! filesink location=/tmp/video33.mp4
Record video from CAM2
:
gst-launch-1.0 v4l2src device=/dev/video24 io-mode=mmap num-buffers=300 ! mpph264enc ! h264parse ! qtmux ! filesink location=/tmp/video24.mp4
Record video from CAM3
:
gst-launch-1.0 v4l2src device=/dev/video42 io-mode=mmap num-buffers=300 ! mpph264enc ! h264parse ! qtmux ! filesink location=/tmp/video42.mp4
Follow the steps bellow to install OpenCV:
sudo apt update sudo apt install libopencv-dev python3-opencv
C++
source code:
#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, 1920); capture.set(CAP_PROP_FRAME_HEIGHT, 1080); 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:
Capture frame from CAM1
:
./mipi /dev/video33
Capture frame from CAM2
:
./mipi /dev/video24
Capture frame from CAM3
:
./mipi /dev/video42
Follow the steps below to install v4l-utils
:
sudo apt update sudo apt install v4l-utils
Capture frame from CAM1
:
v4l2-ctl -d /dev/video33 --set-fmt-video=width=3840,height=2160,pixelformat=NV12 --stream-mmap=3 --stream-skip=3 --stream-to=/tmp/data33.yuv --stream-count=1 --stream-poll
Capture frame from CAM2
:
v4l2-ctl -d /dev/video24 --set-fmt-video=width=3840,height=2160,pixelformat=NV12 --stream-mmap=3 --stream-skip=3 --stream-to=/tmp/data24.yuv --stream-count=1 --stream-poll
Capture frame from CAM3
:
v4l2-ctl -d /dev/video42 --set-fmt-video=width=3840,height=2160,pixelformat=NV12 --stream-mmap=3 --stream-skip=3 --stream-to=/tmp/data42.yuv --stream-count=1 --stream-poll
It will capture a 3840×2160 NV12
format frame to file /tmp/dataXX.yuv
.
Preview the file:
$ ffplay -f rawvideo -pixel_format nv12 -video_size 3840x2160 /tmp/dataXX.yuv