Tech/linux

linux media subsystem [0]

kwangson 2022. 3. 30. 17:19

Doc 먼저 정독하려고한다.

 

크게 3가지로 나뉘는데

userspace -> https://docs.kernel.org/userspace-api/media/index.html

-------------

kernel driver 정보 -> https://docs.kernel.org/admin-guide/media/index.html

kernel driver 개발 -> https://docs.kernel.org/driver-api/media/index.html

 

user level에서 먼저 정리를 시작하여야한다.

특히 봐야할 부분은 v4l2 API, media controller API인데

최초 v4l2는 카메라 코덱등을 위해서 제작된 framework인데 점차 임베디드 시스템이 점차 복잡해지면서 대부분 userspace에서 vendor별 새로운 framework를 제작해야한다. android는 말할것도 없고.. 이를 위해 media controller API가 등장하였고 이후 더 추가적으로 카메라쪽에서는 libcamera도 등장하였다.

 

카메라쪽 v4l2는 너무 복잡하지만 대~충 정리하자면 device 기능 query, control set, open, streaming 동작 순으로 frame을 가져온다. v4l2는 하나의 dev당 하나의 일만 처리하게 하고 있다. (너무 복잡하기때문에) 그래서 보통 카메라의 frame과 meta정보를 가져올때 하나의 카메라일지라도 /dev에 video0, 1 총 2개가 등록된다. (vendor 코덱까지 있다면..!?)

node들이 분리되어있고 각각 control하기때문에 userspace에서는 너무 복잡해서 vendor들은 mediaframework를 하나씩은 다 가지고있다. (android HAL을 지원하던지)

 

media는 앞서 말했듯 이러한 device들의 topology를 이용하여 gstreamer와 비슷한(?) 일을 한다. 따라서 여러 device들의 관계를 유기적으로 유지하려고한다.