TrotVote
[IT 심층 분석]

듀얼 카메라 렌즈 간 캘리브레이션 동기화 실패 트러블슈팅과 타임스탬프 기반 극복기

김민준 · IT 시스템 엔지니어|
최근 모바일 디바이스의 카메라 트렌드는 단연 듀얼 이상의 멀티 렌즈 어레이 솔루션입니다. 와이드와 망원 혹은 컬러와 모노크롬 센서를 결합해 하나의 심도 깊은 이미지를 얻어내기 위해서는 두 렌즈의 광학적 시차를 일치시키는 캘리브레이션 과정이 필수적인데 이 두 센서의 동기화가 제대로 물리지 않는다는 치명적인 이슈 건으로 불려갔습니다. 문제가 보고된 시료 기기에서는 합성된 최종 이미지의 외곽 라인에 명백한 고스팅(Ghosting) 잔상이 발생했고 이는 하드웨어 라인업 런칭을 위협하는 매우 거대한 허들이 되었습니다. 하드웨어 타이밍 동기화 신호선은 하드와이어링으로 이미 두 센서를 묶어두었기에 칩셋 관점에서 보면 오차가 제로에 가까워야 정상이었으나 결과물은 참담했습니다. 현상을 분석하기 위해 두 카메라가 찍어낸 원본 RAW 데이터를 강제로 인터셉트하여 두 이미지 헤더에 기록된 하드웨어 타임스탬프를 10나노 단위로 교차 검증해보았습니다. 충격적이게도 센서 자체는 하드웨어 펄스를 받아 정확히 동일한 시점에 셔터를 발동시켰으나 운영체제의 프레임워크 단으로 데이터가 도달하는 과정에서 미세한 스케줄링 오차가 축적되어 각 센서별로 프레임을 처리하는 파이프라인 컨텍스트가 미세하게 뒤틀려 있었습니다. 즉 A센서의 100번째 프레임이 B센서의 101번째 혹은 그 이전 과거의 프레임 버퍼와 짝꿍이 되어 스테레오 이미지 합성을 시도하고 있었던 것입니다. 프레임 시퀀스 번호만 믿고 동기화를 진행하던 기존 로직의 안일함이 불러온 참사였습니다. 문제를 다 잡기 위해 기존의 단순 프레임 인덱스 기반 패키징 로직을 전면 폐기하고 하드웨어가 각 프레임 데이터의 메타에 각인해 송출하는 절대 시간 커널 타임스탬프를 대조 기준으로 삼는 멀티 프레임 매칭 아키텍처를 재도입했습니다. 커널단에서 각 센서 버퍼가 도착할 때 센서 A를 매스터 스레드로 지정하고 센서 A의 타임스탬프를 기준으로 허용 톨러런스 구간 안에 진입하는 B센서의 데이터 버퍼만을 필터링하는 동기화 큐 시스템을 새롭게 설계한 것입니다. 만약 허용 한계 오차를 벗어난 버퍼가 잡혔다면 지체 없이 그 프레임을 드랍 처리하여 합성 알고리즘에 오염된 입력값이 전달되는 사태를 차단했습니다. 이러한 프레임워크 상의 타임 매칭 메커니즘 변경은 단비와 같은 효과를 냈으나 남겨진 장애물은 이 알고리즘을 얹은 데몬의 CPU 점유율 스파이크 문제였습니다. 버퍼를 폐기하고 탐색하는 과정에서 너무 많은 불필요한 비교 연산 분기가 낭비를 초래했습니다. 이를 최적화하기 위해 이진 탐색 기법 대신 윈도우 슬라이딩 큐 형식으로 버퍼링 구조를 개선하여 O(1) 복잡도로 페어링되는 버퍼 묶음을 찾아내는 로직 튜닝까지 수반했습니다. 결국 두 센서의 시차가 거의 완벽에 가깝게 합성 알고리즘에 피드될 수 있었고 지긋지긋한 고스팅 노이즈는 깔끔하게 단일 광학계로 합쳐진 선명한 피사체의 모서리로 우리에게 보답해 주었습니다. 무릇 분산된 여러 개의 센서 신호를 통합할 때는 단순히 순서를 믿어서는 안 되며 절대적인 시각의 신뢰성을 바탕으로 엄밀하게 교차 검증하는 인프라 매커니즘이 소프트웨어 생존의 관건임을 상기한 처절한 경험담입니다.