라즈베리파이 보드의 펌웨어는 Broadcom VideoCore IV GPU 프로세서의 JPEG 비디오 인코딩 API 또는 H.264 인코딩 API 등을 제공한다 (참고1). 그 덕분에 VideoCore IV 위에서 돌아가는 다양한 카메라들을 제어할 수 있는 mid level 인터페이스 MMAL(MultiMedia Abstraction Layer) 같은 것들이 나올 수 있었다. 프로그래머도 MMAL 을 적절히 통제함으로써 하드웨어에서 제공하는 인코딩을 어렵지 않게 이용할 수 있다 (참고3).

이와 대조적으로, Allogic S922X 과 같은 프로세서는 훌륭한 인코딩 능력을 가지고 있으나 API 를 뚫어놓지 않았다. 이런 경우에는 프로세서가 아무리 좋은 동영상 인코딩 능력을 가지고 있어도 말짱 도루묵이다. CPU 는 범용적인 일을 처리하기 위해 설계되었지 병렬처리 연산을 하라고 설계되지 않았다 (참고4). 비디오 인코딩을 CPU 가 도맡았다가는 CPU 가 다른 일을 하지 못할 정도로 느려지거나 엄청난 발열을 견디지 못할테다 (참고5:실제로 인코딩에 모든 CPU 자원을 다 써버릴지도 모른다.). 보드 제조사가 아예 건드리기조차 할 수 없는데 뭐 어쩔 텐가 (참고2). 라즈베리파이보다 더 우수한 사양을 가진 보드라고 ODROID-N2 같은 보드들을 (참고6:다른 보드들) 함부로 선택했다가 낭패를 볼 수 있다는 것이다.


라즈베리 파이 안에 JPEG 인코더가 있다는건가? 아니면 카메라 펌웨어 안에 JPEG 인코더가 있다는건가? 그럼 카메라에도 H.264 인코더가 있고, GPU 에도 H.264 코어가 있다는건가? (문장에서 말하는 펌웨어가 무엇을 뜻하는가?)


참고

  1. The firmware provides various encoders which can be attached to the still and video ports for the purpose of producing output (e.g. JPEG images or H.264 encoded video).
  2. Q. Amlogic S922X Processor 스팩에 H.265 encoding이 되는 것으로 나와 있는데 어떻게 하면 사용할 수 있나요? Android, Ubuntu에서 모두 확인하려 합니다. A. Video Encoding 관련 API는 Amlogic이 제공하지 않아 사용이 불가능해 보입니다. 언제 제공할 수 있을지에 대한 예측 일정도 없는 상황입니다.
  3. As a result of running on the GPU, it can encode your (rather large) images to disk at around 4 frames per second whilst using almost no CPU. I observed 3 CPU cores were idle and the fourth core hovered on and off around 10-15% usage.
  4. OpenCV is compiled with libjpeg-turbo and all possible HW-flags for accelerated computing. At about 5 or 6 FPS the Raspberry Pi 4 uses about 100% of all 4 cores. The same goes for a non-threaded configuration. We manually set the framerate on the camera and monitor the number of threads spawned (which is about 3-4 concurrent threads at 5-6 FPS). We choose JPEG (even though its lossy) since PNG or TIFF compression takes longer to compute.
  5. deer.aa5_2_1_3.1_5.1. title: 라즈베리파이의 대안이라고 하는 다른 보드들