s 3 c 6410カメラ画像ミラー問題ノート

1567 ワード

カメラのミラーリングの問題はいつもテストだけで深く研究していないことがよくあります最近見てv 4 l 2の下の関連定義を見つけましたまず上のコードこれはqt 4の上で使った他のステップですここではコードを貼りません
    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;
    }

ここで直接FLIP_に設定Y_AXISは垂直方向に異なるカーネルバージョンを反転します.ここでvc設定が異なる可能性があります.ここでは2.6.38のバージョンを使用しています.
また水平方向反転V 4 L 2_CID_HFLIP
videodev 2.hではこの2つのマクロが定義されている
#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関数s 3 c_fimc_v4l2_s_ctrl中
	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;
関数s 3 c_fimc_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);
	}
}

アプリケーションの再コンパイルに関する問題解決