在应用层中,经常需要用到裁剪视频的输入源,网上给的接口都是VIDIOC_S_CROP,多数人在使用这个接口都是没生效的

在内核驱动层mxc_v4l2_capture.c可以找到这个

 /*!* V4l2 VIDIOC_S_CROP ioctl*/case VIDIOC_S_CROP: {struct v4l2_crop *crop = arg;struct v4l2_rect *b = &cam->crop_bounds;pr_debug("   case VIDIOC_S_CROP\n");if (crop->type != V4L2_BUF_TYPE_VIDEO_CAPTURE &&crop->type != V4L2_BUF_TYPE_VIDEO_OVERLAY) {retval = -EINVAL;break;}crop->c.top = (crop->c.top < b->top) ? b->top: crop->c.top;if (crop->c.top > b->top + b->height)crop->c.top = b->top + b->height - 1;if (crop->c.height > b->top + b->height - crop->c.top)crop->c.height =b->top + b->height - crop->c.top;crop->c.left = (crop->c.left < b->left) ? b->left: crop->c.left;if (crop->c.left > b->left + b->width)crop->c.left = b->left + b->width - 1;if (crop->c.width > b->left - crop->c.left + b->width)crop->c.width =b->left - crop->c.left + b->width;crop->c.width -= crop->c.width % 8;crop->c.left -= crop->c.left % 4;cam->crop_current = crop->c;pr_info("   Cropping Input to ipu size %d x %d\n",cam->crop_current.width,cam->crop_current.height);ipu_csi_set_window_size(cam->ipu, cam->crop_current.width,cam->crop_current.height,cam->csi);ipu_csi_set_window_pos(cam->ipu, cam->crop_current.left,cam->crop_current.top,cam->csi);break;

ipu_csi_set_window_size

ipu_csi_set_window_pos

这个两函数接口就是最终决定裁剪大小的,和裁剪起始位置,这两个函数实质是改变imx6内部的寄存器

但是调用这俩个函数之前,设定自己crop的left,top,width,height依然不生效

前面说了ipu_csi_set_window_size 和 ipu_csi_set_window_pos是改变imx6寄存器的,通过打印寄存器的值,可以看到在case VIDIOC_S_CROP之后确实生效了,但是到了最后发现寄存器的值还是crop的left,top,width,height都是0的情况

说明还有其他地方调用了这个两个函数

在mxc_v4l2_capture.c搜索发现还有好几处都调用这个两个函数

但是按照应用可以知道最后一次调用是在mxc_v4l2_s_param这个函数中(对应应用层的接口是VIDIOC_S_PARM)

这个时候在ipu_csi_set_window_size 和 ipu_csi_set_window_pos之前设定你crop的left,top,width,heigh,就可以生效了

imx6q:在应用层对视频输入源做裁剪(crop)不生效相关推荐

  1. APM飞控学习之路:4 源码裁剪与下载

    "月盈则亏,水满则溢".当博主编译完成,以为离成功更近一步准备下载的时候,殊不知陷阱也早已准备好,等待我的踏入.连上USB线,下载,timeout...,timeout...,ti ...

  2. Springboot 源码分析 —— @Endpoint 注解生效原理解析

    文章目录 1 WebMvcEndpointManagementContextConfiguration 1.1 webEndpointServletHandlerMapping 1.2 Control ...

  3. linux 编译源码,修改未生效

    最近在linux 下编译CPP 源码,发现有些修改一直不生效, 找了许久才找到,原来是预编译的锅...(也不叫锅,怪自己不了解这个原理,把自己坑了) 原因如下: 原文链接: https://blog. ...

  4. 科源制药在创业板注册生效:预计年收入4.5亿元,高元坤为实控人

    近日,深圳证券交易所披露的信息显示,山东科源制药股份有限公司(下称"科源制药")在创业板的审核状态变更为"注册生效".换句话,科源制药已经顺利通过注册,距离上市 ...

  5. python图片裁剪crop

    1.opencv import os import cv2 image = cv2.imread('img1.jpg') cropImg = image[int(302-150):int(302+15 ...

  6. D神文木源:创业和做生意不同,区块链现在没有什么创业精神

    这是一个非线性叙事的故事. 文木源直接过来耳朵财经北京总部的办公室,开门见山,"我们分两段聊,我中间需要去见一下柳传志的秘书." 他不管去哪儿都穿着DBX的文化衫.等他回来,接着唠 ...

  7. Android 使用 mp4parser 做视频裁剪

    做音视频时我们很多时候需要做音视频裁剪,本文介绍使用开源库 mp4parser 做裁剪. 视频合并请见我的另外一篇博客<Android 使用 mp4parser 做视频拼接合并> 使用时先 ...

  8. glide源码中包含了那种设计模式_推荐一个好用的拍照选图库,致敬Glide

    本文作者 作者:思忆_GeorgeQin 链接: https://juejin.cn/post/6907620425837051917 本文由作者授权发布. 1内容提要 本文内容较长,包含一个功能整个 ...

  9. opencv + contrib windows下源码编译

    网上,包括书上有很多人云亦云的源码编译方式,不能说不正确但是有很多弯弯绕绕(坑).最近刚做完了一个识别项目的第一个版本,总结了一下..为了写这篇文章,特意重新在自己电脑搭了一遍开发环境. 最权威的方式 ...

最新文章

  1. Theano - Numpy 新手
  2. Android中使用DOM解析xml时出现org.xml.sax.SAXParseException: Unexpected token
  3. git常用命令之stash
  4. 如何将Java工程导出成可以执行的jar
  5. Android高性能ORM数据库DBFlow入门
  6. 计算机存储数字,数字串在计算机内的表示与存储
  7. CentOS 7.2.5 安装 Redis 与 远程访问
  8. openat函数用法示例
  9. mysql的函数的写法_mysql中分组函数的写法
  10. OpenGL与显卡驱动
  11. golang中的strings.ToLower
  12. 人脸识别技术及其各种用例
  13. 【BZOJ1211】【HNOI2004】树的计数(prufer序,组合数)
  14. C# Aspose 操作Word书签
  15. 循环和switch语句中的continue、break
  16. 解决IE6、IE8 宽度兼容
  17. 仿大众点评——秒杀系统部分02
  18. mc有无限火力的服务器地址,我的世界花雨庭无限火力怎么玩 花雨庭无限火力玩法教程...
  19. maria安装包mysql_linux安装Mariadb(mysql分支)
  20. Java开发规范整理

热门文章

  1. oracle 压缩备份比率,Oracle 11g 数据库rman压缩备份压缩率测试
  2. 对比学习+Prompt+FGSM实现文本分类
  3. python plot label_python - matplotlib子图的通用xlabel / ylabel
  4. iOS获取设备唯一标识
  5. 蜘蛛纸牌java设计思路_Java课程设计蜘蛛纸牌 实战项目技巧总结
  6. 2017安卓最全框架
  7. RabbitMQ的6种工作模式的学习记录,普通MAVEN和springboot项目整合rabbitmq的API详解
  8. jsp+springboot+ssm绘本馆活动报名系统javaEE图书借阅管理购买系统
  9. think php数据库配置,think php 配置数据库
  10. 用VB代码在SQL SERVER 中创建数据库,表,列.以及对数据库的操作