[완료] 혹시 웹캠에서 White Balance 조절 어떻게 하는지 아시는분 계신가요?
우분투 9.10 에다가 Logitech C905 인가? 연결해서 영상처리를 하고 있는데요..
uvcvideo 드라이버로 잘 잡혀서 guvcview 같은걸로 영상도 잘 나오고..
제가 짠 프로그램으로도 영상 잘 나옵니다.
근데 화이트밸런스를 끄고 싶은데...
아래 함수로다가.. V4L2_CID_AUTO_WHITE_BALANCE 에 FALSE 를 줘도 안되더라구요.. unsupported 뜹니다.
그래서 이번엔 V4L2_CID_RED_BALANCE 랑 V4L2_CID_BLUE_BALANCE 에 값을 넣어봐도
ioctl querycontrol errer 22 가 뜨더군요..
아래 함수가 문제가 있나 하면 또 V4L2_CID_GAIN 값 같은건 잘 먹히거든요.. 에혀..
분명 guvcview 에는 White Balance Temperature, Auto 가 체크박스로 있고, 이 체크 박스 없애면
AWB 가 꺼지는 거 같거든요..
도무지 어떻게 해야 할 지 감이 안잡히네요..
도움 부탁드립니다....
int v4l2SetControl(struct vdIn *vd, int control, int value) {
struct v4l2_control control_s;
struct v4l2_queryctrl queryctrl;
int min, max, step, val_def;
int err;
if (isv4l2Control(vd, control, &queryctrl) < 0)
return -1;
min = queryctrl.minimum;
max = queryctrl.maximum;
step = queryctrl.step;
val_def = queryctrl.default_value;
if ((value >= min) && (value <= max)) {
control_s.id = control;
control_s.value = value;
if ((err = ioctl(vd->fd, VIDIOC_S_CTRL, &control_s)) < 0) {
return -1;
}
}
return 0;
}
Visit
Visit http://svn.berlios.de/wsvn/guvcview/trunk/src/v4l2_controls.c
Ctrl+F, case V4L2_CID_AUTO_WHITE_BALANCE:, Enter
RET ;My life :P
답변 감사합니다.
네.. 답변 감사합니다.
guvcview 소스 코드를 보긴 했는데..
이걸 따라하자니.. 프로그램을 전체적으로 바꿔야 하더라구요..
저 부분을 붙여넣으니 get_ctrl_by_id 함수가 필요하고.. 이 함수를 쓰자니 또 따른 함수가 필요하고..
control_list 를 관리해야 하고 또 뭐를 해야하고.. 이런식으로..
그래서 어디까지 끌어와야 할 지도 모르겠고, 너무 복잡해져서.. guvcview 소스를 끌어오는건 포기하고 있었어요.. ㅠ.ㅠ
결국 다시 또 저걸 파 봐야 할런지.. 걱정이 태산이네요..
qt 를 쓰고 있는데.. gtk 를 공부해 봐야 할런지.. 그런것들도 고민이고.. 에공..
(qt 로 영상처리해서 화면에 막 뿌려주다 보니 느려지더라구요.. 그래서 gtk 는 더 빠를까 하고..)
쉽지가 않네요.. ㅠ.ㅠ
아아아악~~~
미치겠군요.. ㅠ.ㅠ 어디서드라? 어디서 끌어온 함수에 결함(?!)이 있었던 거로군요!!!
위에 적은 함수 중 isv4l2Control 를 호출하게 되어 있는데 이 함수에서..
queryctrl 을 날려서 리턴값을 체크하는데..
V4L2_CTRL_TYPE_BOOLEAN 을 queryctrl->flags 랑 & 연산 하고 있네요.. 헐..
이 부분을 queryctrl->type 으로 바꿔주니 멀쩡합니다. 흑....
어쩐지 ON/OFF 쪽만 문제가 많더라니.. 흑흑흑..
이제 Auto White Balance 도 잘 꺼집니다.. 흑..
댓글 달기