V4l2의 capture 의 경우 다음과 같은 로직이다.
1. device cap을 보아서 capture와 streaming이 지원하는지 본다.
2. device를 열고 format을 설정한다.
3. streaming 방식을 설정한다.
https://docs.kernel.org/userspace-api/media/v4l/capture.c.html
요 부분을 참고하면 좋다.
그리고 libv4l이라는 라이브러리가 있고 보통 v4l2_open, v4l2_close등의 기능을 제공하는데,
이를 이용하면 기존 단순 v4l2 API + convert까지 한번에 할 수 있는 효과가 있다.
예를 들어 기존 카메라는 MJPEG포맷만 지원하는데 RGB를 하려고하면 user가 MMAP으로 가져온 데이터를 userspace에서 따로 rgb로 convert해야한다. 하지만 libv4l은 이 부분을 알아서 해주는 방식이다. (물론 zero-copy는 아니다)
사용하면서 조금 명확하지 않은 부분은
buffer를 왜 여러개 준비를 할까? (아마 추측은 fps에 따라서 다른 버퍼들이 열심히 채워지고 비우지 않으면 그냥 기다리는 듯 하다.)
나중에 더 자세히 알게되면 추가하려고 한다.
'Tech > linux' 카테고리의 다른 글
linux media subsystem [4] (0) | 2022.04.07 |
---|---|
linux media subsystem [3] (0) | 2022.04.07 |
linux media subsystem [1] (0) | 2022.04.01 |
linux media subsystem [0] (0) | 2022.03.30 |
리눅스 하드웨어 (0) | 2021.11.01 |