Linux์—์„œ ์นด๋ฉ”๋ผ ์ง€์›์„ ์œ„ํ•œ ์Šคํƒ์ธ libcamera์˜ ์ฒซ ๋ฒˆ์งธ ๋ฆด๋ฆฌ์Šค

0.0.1๋…„๊ฐ„์˜ ๊ฐœ๋ฐœ ๋์— libcamera ํ”„๋กœ์ ํŠธ(4)์˜ ์ฒซ ๋ฒˆ์งธ ๋ฆด๋ฆฌ์Šค๊ฐ€ ํ˜•์„ฑ๋˜์–ด Linux, Android ๋ฐ ChromeOS์—์„œ ๋น„๋””์˜ค ์นด๋ฉ”๋ผ, ์นด๋ฉ”๋ผ ๋ฐ TV ํŠœ๋„ˆ์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๊ธฐ ์œ„ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์Šคํƒ์„ ์ œ๊ณตํ–ˆ์œผ๋ฉฐ V2L2.1 API ๊ฐœ๋ฐœ์„ ๊ณ„์†ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ๊ต์ฒดํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ API๊ฐ€ ๊ณ„์† ๋ณ€๊ฒฝ๋˜๊ณ  ์žˆ๊ณ  ์•„์ง ์™„์ „ํžˆ ์•ˆ์ •ํ™”๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ์ ํŠธ๋Š” ์ง€๊ธˆ๊นŒ์ง€ ์ง€์†์ ์ธ ๊ฐœ๋ฐœ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ณ„ ๋ฆด๋ฆฌ์Šค๋ฅผ ๋ถ„๊ธฐํ•˜์ง€ ์•Š๊ณ  ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ˜ธํ™˜์„ฑ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” API ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ถ”์ ํ•˜๊ณ  ํŒจํ‚ค์ง€์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ „๋‹ฌ์„ ๋‹จ์ˆœํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฐํฌํŒ์˜ ํ•„์š”์„ฑ์— ๋Œ€์‘ํ•˜์—ฌ ์ด์ œ ABI ๋ฐ API ๋ณ€๊ฒฝ ๋ฒ”์œ„๋ฅผ ๋ฐ˜์˜ํ•˜๋Š” ๋ฆด๋ฆฌ์Šค๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ƒ์„ฑํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๋Š” C++๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ LGPLvXNUMX ๋ผ์ด์„ ์Šค์— ๋”ฐ๋ผ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ๋Š” ๋…์  ๋“œ๋ผ์ด๋ฒ„์— ์—ฐ๊ฒฐ๋œ ์Šค๋งˆํŠธํฐ ๋ฐ ์ž„๋ฒ ๋””๋“œ ์žฅ์น˜์šฉ ์นด๋ฉ”๋ผ์— ๋Œ€ํ•œ Linux ์ง€์› ์ƒํ™ฉ์„ ์ •์ƒํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ถ€ ์นด๋ฉ”๋ผ ์ œ์กฐ์—…์ฒด์™€ ํ•จ๊ป˜ Linux ์ปค๋„์˜ ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด ํ•˜์œ„ ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Linux ์ปค๋„์—์„œ ์ด๋ฏธ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ API V4L2๋Š” ํ•œ๋•Œ ๊ธฐ์กด์˜ ๋ณ„๋„ ์›น ์นด๋ฉ”๋ผ์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋„๋ก ๋งŒ๋“ค์–ด์กŒ์œผ๋‚˜ MCU ๊ธฐ๋Šฅ์„ CPU๋กœ ์˜ฎ๊ธฐ๋Š” ์ตœ๊ทผ ์ถ”์„ธ์— ์ œ๋Œ€๋กœ ์ ์‘ํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ ์ž‘์—…์ด ๋น„์šฉ ์ ˆ๊ฐ์„ ์œ„ํ•ด ์นด๋ฉ”๋ผ(MCU)์— ๋‚ด์žฅ๋œ ํŠน์ˆ˜ ํ”„๋กœ์„ธ์„œ์—์„œ ์ˆ˜ํ–‰๋˜๋Š” ๊ธฐ์กด ์นด๋ฉ”๋ผ์™€ ๋‹ฌ๋ฆฌ ์ž„๋ฒ ๋””๋“œ ์žฅ์น˜์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์ด ๋ฉ”์ธ CPU์˜ ์–ด๊นจ์—์„œ ์ˆ˜ํ–‰๋˜๋ฉฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ณต์žกํ•œ ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์˜คํ”ˆ ์†Œ์Šค๊ฐ€ ์•„๋‹Œ ๋ผ์ด์„ ์Šค ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. libcamera ํ”„๋กœ์ ํŠธ์˜ ์ผํ™˜์œผ๋กœ ์˜คํ”ˆ ์†Œ์Šค ์†Œํ”„ํŠธ์›จ์–ด ์ง€์ง€์ž์™€ ํ•˜๋“œ์›จ์–ด ์ œ์กฐ์—…์ฒด๋Š” ํ•œํŽธ์œผ๋กœ๋Š” ์˜คํ”ˆ ์†Œ์Šค ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์ž์˜ ์š”๊ตฌ๋ฅผ ์ถฉ์กฑํ•˜๊ณ  ๋‹ค๋ฅธ ํ•œํŽธ์œผ๋กœ๋Š” ์นด๋ฉ”๋ผ ์ œ์กฐ์—…์ฒด์˜ ์ง€์  ์žฌ์‚ฐ์„ ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ๋Š” ์ ˆ์ถฉ ์†”๋ฃจ์…˜์„ ๋งŒ๋“ค๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค.

libcamera ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์Šคํƒ์€ ์ „์ ์œผ๋กœ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์—์„œ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ์†Œํ”„ํŠธ์›จ์–ด ํ™˜๊ฒฝ ๋ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด V4L API, Gstreamer ๋ฐ Android Camera HAL์— ๋Œ€ํ•œ ํ˜ธํ™˜์„ฑ ๋ ˆ์ด์–ด๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์žฅ๋น„์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ ์นด๋ฉ”๋ผ์— ํŠน์ •ํ•œ ๋…์  ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๋ณ„๋„์˜ ํ”„๋กœ์„ธ์Šค์—์„œ ์‹คํ–‰๋˜๊ณ  IPC๋ฅผ ํ†ตํ•ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋ชจ๋“ˆ๋กœ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“ˆ์€ ์žฅ์น˜์— ์ง์ ‘ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ์ค‘๊ฐ„ API๋ฅผ ํ†ตํ•ด ์žฅ๋น„์— ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์š”์ฒญ์€ ํ™•์ธ, ํ•„ํ„ฐ๋ง๋˜๊ณ  ์นด๋ฉ”๋ผ ์ œ์–ด์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์—๋งŒ ์•ก์„ธ์Šคํ•˜๋„๋ก ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋˜ํ•œ ์ด๋ฏธ์ง€์™€ ๋น„๋””์˜ค์˜ ํ’ˆ์งˆ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜(ํ™”์ดํŠธ ๋ฐธ๋Ÿฐ์Šค ์กฐ์ •, ๋…ธ์ด์ฆˆ ๊ฐ์†Œ, ๋น„๋””์˜ค ์•ˆ์ •ํ™”, ์ž๋™ ์ดˆ์ , ๋…ธ์ถœ ์„ ํƒ ๋“ฑ)์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ์ด๋Š” ๊ฐœ๋ฐฉํ˜• ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋˜๋Š” ๋…์  ํ˜•ํƒœ๋กœ ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฉ๋ฆฌ๋œ ๋ชจ๋“ˆ. API๋Š” ๊ธฐ์กด ์™ธ๋ถ€ ๋ฐ ๋‚ด์žฅ ์นด๋ฉ”๋ผ์˜ ๊ธฐ๋Šฅ ๊ฒฐ์ •, ์žฅ์น˜ ํ”„๋กœํ•„ ์‚ฌ์šฉ, ์นด๋ฉ”๋ผ ์—ฐ๊ฒฐ ๋ฐ ์—ฐ๊ฒฐ ํ•ด์ œ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ, ๊ฐœ๋ณ„ ํ”„๋ ˆ์ž„ ์ˆ˜์ค€์—์„œ ์นด๋ฉ”๋ผ ๋ฐ์ดํ„ฐ ์บก์ฒ˜ ๊ด€๋ฆฌ, ์ด๋ฏธ์ง€๋ฅผ ํ”Œ๋ž˜์‹œ์™€ ๋™๊ธฐํ™”์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์— ์žˆ๋Š” ์—ฌ๋Ÿฌ ๋Œ€์˜ ์นด๋ฉ”๋ผ์™€ ๋ณ„๋„๋กœ ์ž‘์—…ํ•˜๊ณ  ํ•œ ๋Œ€์˜ ์นด๋ฉ”๋ผ์—์„œ ์—ฌ๋Ÿฌ ๋น„๋””์˜ค ์ŠคํŠธ๋ฆผ์„ ๋™์‹œ์— ์บก์ฒ˜ํ•˜๋„๋ก ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: ํ™”์ƒ ํšŒ์˜๋ฅผ ์œ„ํ•œ ์ €ํ•ด์ƒ๋„ ์นด๋ฉ”๋ผ์™€ ๋””์Šคํฌ ๊ธฐ๋ก ๋ณด๊ด€์„ ์œ„ํ•œ ๊ณ ํ•ด์ƒ๋„ ์นด๋ฉ”๋ผ).

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€