s3c6410 카메라 이미지 렌즈 문제 노트

1577 단어
카메라 렌즈의 문제점은 자주 부딪히는데 테스트만 하고 깊이 연구하지 못했어요. 최근에 봤는데 v4l2 아래의 관련 정의를 찾았어요. 우선 코드. 이건 qt4에서 사용한 다른 절차예요. 여기는 코드를 붙이지 않아요.
    struct v4l2_control vc;
    vc.id = V4L2_CID_VFLIP;
    vc.value = 0;

    /* Set up for mirror */
    if (ioctl(fd, VIDIOC_S_CTRL, &vc) < 0) {
        emit display_error(tr("VIDIOC_S_CTRL").arg(QString(strerror(errno))));
        return -1;
    }

FLIPY_AXIS 즉 수직으로 다른 핵 버전을 뒤집는 거예요. 여기vc 설정이 다를 수 있어요. 제가 쓰는 건 2.6.38 버전이에요.
그리고 수평으로 뒤집기 V4L2CID_HFLIP
비디오 dev2.h에서 이 두 개의 매크로를 정의했습니다
#define V4L2_CID_HFLIP			(V4L2_CID_BASE+20)
#define V4L2_CID_VFLIP			(V4L2_CID_BASE+21)

대응 구동
drivers/media/video/samsung/fimc/s3c_fimc_v4l2.c 함수 s3cfimc_v4l2_s_ctrl 중
4
	case V4L2_CID_HFLIP:
		frame->flip = FLIP_X_AXIS;
		ctrl->rot90 = 0;
		s3c_fimc_change_rotate(ctrl);
		break;

	case V4L2_CID_VFLIP:
		frame->flip = FLIP_Y_AXIS;
		ctrl->rot90 = 0;
		s3c_fimc_change_rotate(ctrl);
		break;
함수 s3cfimc_change_rotate 중 가장 큰 것은 6410의 CAMIF에 있는 CICOTRGFMT 레지스터의 14-15위를 설정합니다.
void s3c_fimc_change_rotate(struct s3c_fimc_control *ctrl)
{
	u32 cfg;

	if (ctrl->rot90)
		s3c_fimc_set_rot90(ctrl);

	if (ctrl->out_type == PATH_OUT_DMA) {
		cfg = readl(ctrl->regs + S3C_CIPRTRGFMT);
		cfg &= ~S3C_CIPRTRGFMT_FLIP_MASK;
		cfg |= (ctrl->out_frame.flip << S3C_CIPRTRGFMT_FLIP_SHIFT);

		writel(cfg, ctrl->regs + S3C_CIPRTRGFMT);
	}
}

애플리케이션 문제 해결 재컴파일

좋은 웹페이지 즐겨찾기