s3c6410 摄像头图像镜像问题笔记

摄像头镜像的问题经常碰到 一直只是测试没有深入去研究 最近看了下 找到了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;
    }
这里直接设置成FLIP_Y_AXIS即垂直方向翻转 不同的内核版本这里的vc设置有可能不一样 我这里用的是2.6.38的版本

还有水平方向翻转V4L2_CID_HFLIP

在videodev2.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 函数s3c_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;
在函数s3c_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);
	}
}

重新编译应用程序问题解决

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值