V4L2 (Video 4 Linux 2)
서론
V4L2 API를 사용할 일이 있어서 간단하게 정리해보았다.
자세한 내용은 공식 문서를 참고하자.
V4L2 (Video 4 Linux 2)
V4L2는 리눅스 시스템에서 비디오 장치에 대한 통합 인터페이스를 제공하는 디바이스 드라이버 프레임워크(Device Driver Framework)이다.
V4L2는 비디오 디바이스 드라이버들을 관리하며 비디오 장치를 실시간으로 캡처하거나 재생할 수 있는 API를 제공한다.
각 V4L2 장치들은 파일 시스템에 /dev/video*
노드를 생성하여 응용 프로그램이 커널을 통해 시스템 하드웨어에 접근할 수 있게 한다.
V4L2 구조
V4L2 프레임워크는 커널 내부의 V4L2 Core 모듈로 구성되어 있다.
V4L2 Core 모듈은 V4L2 프레임워크에 사용하는 구조체와 함수들을 가지고 있으며 V4L2 프레임워크의 전반적인 동작과 이벤트를 관리한다.
- video_device : 비디오 장치에 대한 정보를 가지고 있는 구조체
- videobuf : 비디오 버퍼를 관리하는 구조체
- cdev : 비디오 장치를 식별하는 구조체
- v4l2_device : 비디오 장치가 사용하는 하위 장치들을 트리 구조로 관리하는 구조체
- v4l2_subdev : 하위 장치에 대한 정보를 가지고 있는 구조체
V4L2 동작
Application은 파일 시스템(/dev/video*
)에 접근하여 저수준 입출력 함수(ioctl)를 통해 V4L2 API를 사용할 수 있다. (libv4l 라이브러리의 API를 사용할 수도 있다.)
Application의 요청을 받은 V4L2 Core 모듈은 cdev를 통해 Application이 요청한 비디오 디바이스 번호를 식별한다.
video_device는 요청한 API에 맞는 동작을 수행하며 연결된 드라이버들이 물리적인 하드웨어와 상호작용한다.
v4l2-ctl
v4l2-ctl
은 v4l2 장치를 제어하는 명령어이다.
# v4l2 장치 목록을 확인
v4l2-ctl --list-devices
# 특정 v4l2 장치의 드라이버 정보를 확인
v4l2-ctl --device <드라이버 이름> --info
# 특정 v4l2 장치가 지원하는 픽셀 포맷을 확인
v4l2-ctl --device <드라이버 이름> --list-formats
# 특정 v4l2 장치가 지원하는 픽셀 포맷과 해상도를 확인
v4l2-ctl --device <드라이버 이름> --list-formats-ext
# 특정 v4l2 장치의 모든 정보 확인
v4l2-ctl --device <드라이버 이름> --all