0
点赞
收藏
分享

微信扫一扫

【genius_platform软件平台开发】第六十六讲:Linux系统之V4L2视频驱动-应用层close关闭



应用层close关闭

  • 创建了微信群欢迎一起学习:
  • 1. 概述
  • 2.应用层
  • 3. 驱动层
  • 3.1 vb2_queue_release函数
  • 3.2 vb2_core_queue_release函数
  • 3.3 __vb2_cleanup_fileio函数
  • 3.4 vb2_core_streamoff函数


1. 概述

  • 关闭视频流,munmap解除参数start所指向的内存起始地存起始地址。

2.应用层

终于走到最后一步close

close(fd);

3. 驱动层

close可能不会走release指针接口,具体看设备相关的设置,大致流程:.release = vb2_fop_release,vb2_fop_release->_vb2_fop_release->vb2_queue_release

3.1 vb2_queue_release函数

void vb2_queue_release(struct vb2_queue *q)
{
	vb2_core_queue_release(q);
}
EXPORT_SYMBOL_GPL(vb2_queue_release);

3.2 vb2_core_queue_release函数

void vb2_core_queue_release(struct vb2_queue *q)
{
	__vb2_cleanup_fileio(q);
	__vb2_queue_cancel(q);
	mutex_lock(&q->mmap_lock);
	__vb2_queue_free(q, q->num_buffers);
	mutex_unlock(&q->mmap_lock);
}
EXPORT_SYMBOL_GPL(vb2_core_queue_release);

3.3 __vb2_cleanup_fileio函数

/**
 * __vb2_cleanup_fileio() - free resourced used by file io emulator
 * @q:		videobuf2 queue
 */
static int __vb2_cleanup_fileio(struct vb2_queue *q)
{
	struct vb2_fileio_data *fileio = q->fileio;

	if (fileio) {
		vb2_core_streamoff(q, q->type);
		q->fileio = NULL;
		fileio->count = 0;
		vb2_core_reqbufs(q, fileio->memory, &fileio->count);
		kfree(fileio);
		dprintk(3, "file io emulator closed\n");
	}
	return 0;
}

3.4 vb2_core_streamoff函数

int vb2_core_streamoff(struct vb2_queue *q, unsigned int type)
{
	if (type != q->type) {
		dprintk(1, "invalid stream type\n");
		return -EINVAL;
	}

	/*
	 * Cancel will pause streaming and remove all buffers from the driver
	 * and videobuf, effectively returning control over them to userspace.
	 *
	 * Note that we do this even if q->streaming == 0: if you prepare or
	 * queue buffers, and then call streamoff without ever having called
	 * streamon, you would still expect those buffers to be returned to
	 * their normal dequeued state.
	 */
	__vb2_queue_cancel(q);
	q->waiting_for_buffers = !q->is_output;
	q->last_buffer_dequeued = false;

	dprintk(3, "successful\n");
	return 0;
}
EXPORT_SYMBOL_GPL(vb2_core_streamoff);


举报

相关推荐

0 条评论