{{indexmenu_n>40}} ====== Edge2 MIPI Camera Usage ====== ===== Linux ===== Edge2 CAM3 support **4K@60fps** record. If your **hardware version is V13 or later**, the **CAM2** also can support **4K@60fps** record. **Check Hardware Version** ```shell $ cat /proc/cmdline ``` V13 or later version will show like ''hwver=EDGE2.V13''. Due to the different hardware versions, **CAM2 is set to 4K@30fps by default**. This is for compatibility with V11 or V12 hardware versions to ensure proper operation. If your device supports 4K@60fps, you can enable this mode by adding an overlay node ''cam2-4lane''. Edit ''/boot/dtb/rockchip/rk3588s-khadas-edge2.dtb.overlay.env'' to setup ''fdt_overlays=cam2-4lane''. About IMX585 and IMX678, the two cameras were disabled by default. So V11 or V12 hardware version should replace ''cam2-4lane'' by ''imx585'' or ''imx678'': Edit ''/boot/dtb/rockchip/rk3588s-khadas-edge2.dtb.overlay.env'' to setup ''fdt_overlays=imx585'' or ''fdt_overlays=imx678''. V13 or later hardware version should be set ''imx585-cam2-4lane'' or ''imx678-cam2-4lane'': Edit ''/boot/dtb/rockchip/rk3588s-khadas-edge2.dtb.overlay.env'' to setup ''fdt_overlays=imx585-cam2-4lane'' or ''fdt_overlays=imx678-cam2-4lane''. You need to reboot the device to take effect. ==== Upgrade System ==== Please follow the [[products:sbc:edge2:configurations:upgrade-system|documentation ]]to upgrade your system to latest version. ==== Video Node ==== You can find the video nodes from the table below. | ^ Video Node ^ ^ CAM1 | /dev/video42 | ^ CAM2 | /dev/video33 | ^ CAM3 | /dev/video51 | ==== Record Video with Gstreamer ==== Record video from ''CAM1'': ```shell gst-launch-1.0 v4l2src device=/dev/video42 io-mode=dmabuf num-buffers=300 ! video/x-raw,format=NV12,width=3840,height=2160,framerate=30/1 ! mpph264enc ! h264parse ! qtmux ! filesink location=/tmp/video42.mp4 ``` Record video from ''CAM2'': ```shell gst-launch-1.0 v4l2src device=/dev/video33 io-mode=dmabuf num-buffers=300 ! video/x-raw,format=NV12,width=3840,height=2160,framerate=30/1 ! mpph264enc ! h264parse ! qtmux ! filesink location=/tmp/video33.mp4 ``` For 4K@60fps, framerate should be set 60/1 Record video from ''CAM3'': ```shell gst-launch-1.0 v4l2src device=/dev/video51 io-mode=dmabuf num-buffers=600 ! video/x-raw,format=NV12,width=3840,height=2160,framerate=60/1 ! mpph264enc ! h264parse ! qtmux ! filesink location=/tmp/video51.mp4 ``` /* ==== Record Video with OpenCV ==== Follow the steps bellow to install OpenCV: ```shell sudo apt update sudo apt install libopencv-dev python3-opencv ``` ''C++'' source code: ```c++ mipi-camera.cpp #include #include #include #include #include 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: ```shell 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'': ```shell ./mipi /dev/video33 ``` Capture frame from ''CAM2'': ```shell ./mipi /dev/video24 ``` Capture frame from ''CAM3'': ```shell ./mipi /dev/video42 ``` */ ==== Capture Frame with V4L2 Utils ==== Follow the steps below to install ''v4l-utils'': ```shell sudo apt update sudo apt install v4l-utils ``` Capture frame from ''CAM1'': ```shell 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 ``` Capture frame from ''CAM2'': ```shell 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 ''CAM3'': ```shell v4l2-ctl -d /dev/video51 --set-fmt-video=width=3840,height=2160,pixelformat=NV12 --stream-mmap=3 --stream-skip=3 --stream-to=/tmp/data51.yuv --stream-count=1 --stream-poll ``` It will capture a ''3840x2160 NV12'' format frame to file ''/tmp/dataXX.yuv''. Preview the file: ```shell $ ffplay -f rawvideo -pixel_format nv12 -video_size 3840x2160 /tmp/dataXX.yuv ``` ===== Android ===== WIP: