打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
msm_generic_buf_mgr

static int32_t __init msm_buf_mngr_init(void)

{

}

一:

v4l2_subdev_notify(&msm_buf_mngr_dev->subdev.sd, MSM_SD_NOTIFY_REQ_CB,

                   &msm_buf_mngr_dev->vb2_ops);

函数实现在v4l2-device.h

static inline void v4l2_subdev_notify(struct v4l2_subdev *sd,

                                           unsigned int notification, void *arg)

{

         if (sd && sd->v4l2_dev && sd->v4l2_dev->notify)

                   sd->v4l2_dev->notify(sd, notification, arg);

}

其中sd->v4l2_dev是在msm_sd_register(&msm_buf_mngr_dev->subdev);中赋值的:

msm.cstatic inline int __msm_sd_register_subdev(struct v4l2_subdev *sd)

{

         vdev->v4l2_dev = msm_v4l2_dev;

}

所以sd->v4l2_devmsm_v4l2_dev。这个notify是在

static int msm_probe(struct platform_device *pdev)

{

         msm_v4l2_dev->notify = msm_sd_notify;

}

static void msm_sd_notify(struct v4l2_subdev *sd,

         unsigned int notification, void *arg)

{

         case MSM_SD_NOTIFY_REQ_CB: {

                   struct msm_sd_req_vb2_q *req_sd = arg;

                   rc = msm_vb2_request_cb(req_sd);

}msm_vb2.c

int msm_vb2_request_cb(struct msm_sd_req_vb2_q *req)

{

         if (!req) {

                   pr_err("%s: suddev is null\n", __func__);

                   return -EINVAL;

         }

         req->get_buf = msm_vb2_get_buf;

         req->get_buf_by_idx = msm_vb2_get_buf_by_idx;

         req->get_vb2_queue = msm_vb2_get_queue;

         req->put_buf = msm_vb2_put_buf;

         req->buf_done = msm_vb2_buf_done;

         req->flush_buf = msm_vb2_flush_buf;

         return 0;

}

所以最终msm_buf_mngr_dev->vb2_ops其实是被msm_vb2.c赋值的。

二:

static int32_t msm_buf_mngr_get_buf_by_idx(struct msm_buf_mngr_device *dev,

         void *argp)

{

         new_entry->vb2_buf = dev->vb2_ops.get_buf_by_idx(buf_info->session_id,

                   buf_info->stream_id, buf_info->index);

}

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
V4L2框架分析学习(转载收藏)
actuator
基于RV1126SDK media之GC2053、SC200AI、imx291分析 --- 运行设备(VIDIOC_STREAMON)
Android設備驅動之--v4l2
LINUX字符设备驱动程序实例(scull)
外置sd卡与手机内置储存合并互换
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服