-
Notifications
You must be signed in to change notification settings - Fork 101
/
Copy path0001-libv4l2-Support-mmap-to-libv4l-plugin.patch
48 lines (44 loc) · 1.88 KB
/
0001-libv4l2-Support-mmap-to-libv4l-plugin.patch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
From 40c17dd62e8c0769f62f6b8529d20e03baadceab Mon Sep 17 00:00:00 2001
From: Jeffy Chen <jeffy.chen@rock-chips.com>
Date: Sun, 28 Apr 2019 15:31:53 +0800
Subject: [PATCH] libv4l2: Support mmap() to libv4l-plugin
Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
---
lib/include/libv4l-plugin.h | 2 ++
lib/libv4l2/libv4l2.c | 10 ++++++++++
2 files changed, 12 insertions(+)
diff --git a/lib/include/libv4l-plugin.h b/lib/include/libv4l-plugin.h
index 23b2dfb..acb0a54 100644
--- a/lib/include/libv4l-plugin.h
+++ b/lib/include/libv4l-plugin.h
@@ -32,6 +32,8 @@ struct libv4l_dev_ops {
int (*ioctl)(void *dev_ops_priv, int fd, unsigned long int request, void *arg);
ssize_t (*read)(void *dev_ops_priv, int fd, void *buffer, size_t n);
ssize_t (*write)(void *dev_ops_priv, int fd, const void *buffer, size_t n);
+ void * (*mmap)(void *dev_ops_priv, void *start, size_t length, int prot,
+ int flags, int fd, int64_t offset);
/* For future plugin API extension, plugins implementing the current API
must set these all to NULL, as future versions may check for these */
void (*reserved1)(void);
diff --git a/lib/libv4l2/libv4l2.c b/lib/libv4l2/libv4l2.c
index 2db25d1..21e6f05 100644
--- a/lib/libv4l2/libv4l2.c
+++ b/lib/libv4l2/libv4l2.c
@@ -1627,6 +1627,16 @@ void *v4l2_mmap(void *start, size_t length, int prot, int flags, int fd,
void *result;
index = v4l2_get_index(fd);
+ if (index != -1 && devices[index].dev_ops->mmap) {
+ pthread_mutex_lock(&devices[index].stream_lock);
+ result = devices[index].dev_ops->mmap(
+ devices[index].dev_ops_priv, start,
+ length, prot, flags, fd, offset);
+
+ pthread_mutex_unlock(&devices[index].stream_lock);
+ return result;
+ }
+
if (index == -1 ||
/* Check if the mmap data matches our answer to QUERY_BUF. If it doesn't,
let the kernel handle it (to allow for mmap-based non capture use) */
--
2.11.0