Khadas Docs

Amazing Khadas, always amazes you!

User Tools

Site Tools


Sidebar

products:sbc:edge2:add-ons:edge2-mipi-camera

This is an old revision of the document!


Edge2 MIPI Camera Usage

Linux

Video Node

You can find the video nodes from the table below.

Video Node
CAM1 /dev/video33
CAM2 /dev/video24
CAM3 /dev/video42

Record Video with Gstreamer

Record Video

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

Record Video with OpenCV

Install OpenCV
sudo apt update
sudo apt install libopencv-dev python3-opencv
mipi-camera.cpp
#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

Capture Frame with V4L2 API

Install V4l2 Utils
sudo apt update
sudo apt install v4l-utils
Capture Frame

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

Android

WIP:

Last modified: 2023/07/04 23:18 by nick