Search
🟢

deer.b3.1.1.5.1. title: 카메라와 라즈베리파이 프로세서의 상호작용 파이프라인

🚀 prev note
♻️ prev note
♻️ next note
17 more properties
그림 (참고1)
라즈베리파이는 자체 GPU ‘VideoCore’ (참고2) 를 가지고 있다. GPU 에는 놀랍게도 Real Time OS (참고3:VCOS) 가 구동되고 있다 (참고1). CPU 는 Linux 위에 있는 python script 를 돌리고, Videocore GPU 는 VCOS 를 돌린다. 둘은 서로 완전히 구분된 일을 하고 있다.
VideoCore Host Interface (VCHI) 는 CPU 와 GPU 소통을 가능하게 하는 메시지 전달 시스템이다 (참고4). 카메라를 라즈베리파이에 꽂았을 때 GPU CPU 간 통신을 위해 약 128Mb(주의:Megabit) 정도의 RAM 을 할당받는다 (참고5). 이렇게 메모리를 할당받고 나면 드디어 온전히 ‘라즈베리파이' 와 ‘카메라' 가 CSI-2 인터페이스를 통해 ‘연결' 된 것이라고 말할 수 있다 (참고6).
큰 흐름은 다음과 같다. VCOS 는 이미지센서로부터 한 행씩 끊임없이 읽어들이는 행 조각들(1:streaming frame lines) 을 RAM 에서 합치며, 합쳐진 조각들에 감초를 쳐서(2:post-processing) (참고10) 완전한 하나의 영상을 만든다. 이렇게 완전히 만들어진 하나의 영상은, CPU 에서 실행되는 python script 에 의해 불려나갈 것이다. python picamera 패키지의 capture() 메서드는 (3:capture) MMAL(MultiMedia Abstraction Layer) (참고8) API (4:picamera→MMAL) 를 호출하고, MMAL API 는 VCHI 을 통해 완성된 영상을 달라고 다시 요청한다(5:MMAL→VCHI). VCHI 는 GPU 의 메모리에 저장되어 있는 완전한 영상 한 개를 CPU 의 메모리로 그대로 이전한다 (6:DMA transfer). 이렇게 CPU 가 사용 가능한 메모리로 이전한 뒤 ‘데이터 이전 완료' 인터럽트를(참고9:DMA) VCHI 를 통해 전달한다 (7:VCHI→MMAL). 이제 picamera 라이브러리로부터 콜백함수를 호출하여 (8:callback) write() 한 뒤 내가 지정한 변수에 온전한 영상을 저장한다 (9:write) (참고7).
참고