v4l2-int-device.c
이 부분은 v4l2의 Master와 Slave를 연결해주는 함수들로 이루어져 있다.
v4l2_int_device_try_attach_all()이라는 함수는 Master/Slave에 구분없이 등록되어 있는 static LIST_HEAD(int_list)를
뒤져가면서 둘사이를 연결 시켜주는 역할을 한다. 내가 보고 있는 두개의 다른 파일이 있는데 내가
사용하는 곳에는 __v4l2_int_device_try_attach_all()이라는 함수를 mutex로 보호해서 사용하고 있다.
mutex를 사용한 부분이 좀더 낳은 매카니즘인거 같아 내가 사용하는게 좀더 나은 버전인거 같다.
그리고 v4l2에서 빈번하게 사용하는 NULL의미 대신 사용하는
v4l2_int_device_dummy()라는 함수도 정의되어 있다. 내부를 살펴보면 struct v4l2_int_ioctl_desc를 저장하는데
필요한 빈공간을 확보하고 디바이스 타입을 v4l2_int_type_slave로 해놓았다.
그리고 v4l2의 master와 slave를 연결시켜주는 콜백함수는 호출하는 방식에 따라서
int v4l2_int_ioctl_0(struct v4l2_int_device *d, int cmd)나
int v4l2_int_ioctl_1(struct v4l2_int_device *d, int cmd, void *arg)를
통해서 연결된다. 즉, 모든 콜백함수는 호출되기전에 위의 두개의 함수중 하나를 반드시 거친다.
댓글 없음:
댓글 쓰기