본문 바로가기

Tech/linux

linux media subsystem [1]

media subsystem은 코덱, cec등이 여러 부분이 있고 내가 보려고하는 부분은 카메라에 대한 이야기다.

 

지난번 media subsystem에서 user space API를 보고 카메라는 2부분에서 영향이 있다. V4L2와 media controller API.

https://docs.kernel.org/userspace-api/media/v4l/v4l2.html 그중 v4l2를 먼저 알아야한다.

처음 문서를 보았을때는 전혀 무슨말인지도 모르겠고 뭐가 뭔지도 몰랐다.

 

우선 커널에서 제공하는 카메라 test driver로 하나씩 보자.

$ sudo modprobe vivid -> vivid라고하는 virtual camera 생성

이러면 /dev/video0 와 /dev/video1이 생성된것을 확인 할 수 있다.

이후 이게 뭔가 싶겠지만 v4l-util에서 제공하는 v4l2-ctl과 qv4l2 프로그램으로 더 자세하게 볼 수 있다.

 

우선 qv4l2 ... 실행 나온다 이것저것 건드려보기.

 

그다음 v4l2-ctl 로 cap, device cap등을 보고

video0 와 video1의 차이

 

이렇게 보았다면 이제 문서에서 몇가지 중요한 글이 보인다.

1.1 우선 open에서 중요한점.

multiple open 처럼 open은 여러번 할 수도있다.(안될수도 있다.) qv4l2를 2개의 터미널에서 각각 열고 하나의 터미널에서 streaming을 시작하더라도 다른 터미널에서 실행한 qv4l2로 control을 수정할 수 있다.

 

1.2 but 두번째 qv4l2에서 streaming을 시작하려고 하면 EBUSY를 받는다. 이유는 share는 안되고 이건 userspace app이 proxy를 알아서 하라는 것이다.

 

1.3 이를 multi streaming이라고하는데 v4l2loop 에 관한 시도가 있지만 자세히는 모르고 몇몇 드라이버에서 시도한듯하다. (추후 정리 필요)

 

2. input, output이란 무엇일까.

input device은 카메라처럼 세상의 빛 정보를 data로 저장하는 방식을 해준다. output device는 이를 encode해서 jpg등으로 저장하는 것. 따라서 capture interface 를 이용하여 input device를 사용. codec을 이용해서 overlay interface crop이나 변환 이후 output interface를 이용하여 저장.

input device는 어떤 정보를 메모리로 옮겨주는것. output device는 반대.

하지만 거의 대부분 capture / codec devices 들이 대부분.

 

3. fps는 의미가 있을까?

사실 그냥 버퍼를 계속 받으면 되는건데 fps가 무슨 의미가 있을까 했는데 fps를 설정하고 그 전에 요청을 커널에서 이 부분을 핸들링 해준다.

 - This will configure the speed at which the video source (e.g. a sensor) generates video frames. If the speed is fixed, then the driver may choose to skip or repeat frames in order to achieve the requested frame rate.

'Tech > linux' 카테고리의 다른 글

linux media subsystem [3]  (0) 2022.04.07
linux media subsystem [2]  (0) 2022.04.07
linux media subsystem [0]  (0) 2022.03.30
리눅스 하드웨어  (0) 2021.11.01
RPI4 에 Linux 빌드 올리기 #3 Linux kernel  (0) 2021.07.30