본문 바로가기
NVIDIA Jeston/Jetson BSP

[Jetson] V4L2 C++ 로 카메라 정보 확인하기

by makepluscode 2022. 6. 30.
반응형

V4L2 C++ 로 카메라 정보 확인하기

하나의 임베디드 시스템에 여러대의 카메라가 연결될 경우, 각각의 카메라의 node 를 구별해야하는 경우가 있다. Video4Linux 에서 제공하는 utils 기능으로 Jetson 에 연결된 카메라의 정보를 읽는 C++ 예제를 실행해본다.

Jetson V4L2 util 명령으로 카메라 정보 얻기

테스트 환경

  • Jetson Xavier NX + JetPack 4.6 (L4T R32.6.1)

커멘드라인 명령

터미널 커멘드 라인 명령을 사용하기 위해서는 apt 를 이용해서 v4l-utils 를 설치해야한다.

$ sudo apt-get install v4l-utils

터미널 커멘드 라인에서 v4l2-ctl 명령어로 연결된 카메라를 list-up 할 수 있다. 현재 NX 에는 AR0521 MIPI 카메라와 USB 카메라가 연결된 상태이다.

$ v4l2-ctl --list-devices
vi-output, ar0521 10-0042 (platform:15c10000.vi:2):
        /dev/video0

oCam-5CRO-U-M (usb-3610000.xhci-3.1):
        /dev/video1

C++ 에서 카메라 정보 읽어오기

다음의 github 코드를 사용한다.

https://github.com/doleron/v4l2-list-devices.git

 

GitHub - doleron/v4l2-list-devices: A single header file containing a single function to list camera devices on linux using V4L2

A single header file containing a single function to list camera devices on linux using V4L2 and ioctl - GitHub - doleron/v4l2-list-devices: A single header file containing a single function to lis...

github.com

이 코드를 build 하기 전에, 다음과 같이 string.h 를 추가한다.

~/v4l2-list-devices$ git diff
diff --git a/include/list_devices.hpp b/include/list_devices.hpp
index db3414e..5179bc3 100644
--- a/include/list_devices.hpp
+++ b/include/list_devices.hpp
@@ -35,6 +35,8 @@

 #include <dirent.h> //to list dir's content

+#include <string.h>
+
 namespace v4l2
 {
     namespace devices

위와 같이 string.h 를 추가하고, cmake 와 make 를 실행한다.

nvidia@nvidia-desktop:~/v4l2-list-devices$ cmake . && make
-- Configuring done
-- Generating done
-- Build files have been written to: /home/nvidia/v4l2-list-devices
[100%] Built target list-devices

build 된 list-devices 파일을 실행한다. 터미널에서 실행한 v4l2-ctl 명령어와 동일하게 결과가 나옴을 알 수 있다.

nvidia@nvidia-desktop:~/v4l2-list-devices$ ./list-devices
vi-output, ar0521 10-0042 at platform:15c10000.vi:2 is attached to
/dev/video0

oCam-5CRO-U-M at usb-3610000.xhci-3.1 is attached to
/dev/video1

아래 main 코드의  device_description 과 device_paths 를 이용하면, 하나의 임베디드 시스템에 연결된 각각의 카메라의 node 를 구별해야하는 경우에 유용하게 사용될 수 있다.

int main() {

    std::vector<v4l2::devices::DEVICE_INFO> devices;

    v4l2::devices::list(devices);

    for (const auto & device : devices) 
    {
        std::cout << device.device_description <<  " at " << device.bus_info << " is attached to\n";

        for (const auto & path : device.device_paths) {
            std::cout << path << "\n";
        }

        std::cout << "\n";
    }

}

참고자료

https://github.com/makepluscode/v4l2-list-devices.git

 

GitHub - makepluscode/v4l2-list-devices: A single header file containing a single function to list camera devices on linux using

A single header file containing a single function to list camera devices on linux using V4L2 and ioctl - GitHub - makepluscode/v4l2-list-devices: A single header file containing a single function t...

github.com

반응형