Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
media
v4l2-mem2mem.h
Go to the documentation of this file.
1
/*
2
* Memory-to-memory device framework for Video for Linux 2.
3
*
4
* Helper functions for devices that use memory buffers for both source
5
* and destination.
6
*
7
* Copyright (c) 2009 Samsung Electronics Co., Ltd.
8
* Pawel Osciak, <
[email protected]
>
9
* Marek Szyprowski, <
[email protected]
>
10
*
11
* This program is free software; you can redistribute it and/or modify
12
* it under the terms of the GNU General Public License as published by the
13
* Free Software Foundation; either version 2 of the
14
* License, or (at your option) any later version
15
*/
16
17
#ifndef _MEDIA_V4L2_MEM2MEM_H
18
#define _MEDIA_V4L2_MEM2MEM_H
19
20
#include <
media/videobuf2-core.h
>
21
44
struct
v4l2_m2m_ops
{
45
void
(*
device_run
)(
void
*
priv
);
46
int
(*
job_ready
)(
void
*
priv
);
47
void
(*
job_abort
)(
void
*
priv
);
48
void
(*
lock
)(
void
*
priv
);
49
void
(*
unlock
)(
void
*
priv
);
50
};
51
52
struct
v4l2_m2m_dev
;
53
54
struct
v4l2_m2m_queue_ctx
{
55
/* private: internal use only */
56
struct
vb2_queue
q
;
57
58
/* Queue for buffers ready to be processed as soon as this
59
* instance receives access to the device */
60
struct
list_head
rdy_queue
;
61
spinlock_t
rdy_spinlock
;
62
u8
num_rdy
;
63
};
64
65
struct
v4l2_m2m_ctx
{
66
/* private: internal use only */
67
struct
v4l2_m2m_dev
*
m2m_dev
;
68
69
/* Capture (output to memory) queue context */
70
struct
v4l2_m2m_queue_ctx
cap_q_ctx
;
71
72
/* Output (input from memory) queue context */
73
struct
v4l2_m2m_queue_ctx
out_q_ctx
;
74
75
/* For device job queue */
76
struct
list_head
queue
;
77
unsigned
long
job_flags
;
78
wait_queue_head_t
finished
;
79
80
/* Instance private data */
81
void
*
priv
;
82
};
83
84
struct
v4l2_m2m_buffer
{
85
struct
vb2_buffer
vb
;
86
struct
list_head
list
;
87
};
88
89
void
*
v4l2_m2m_get_curr_priv
(
struct
v4l2_m2m_dev
*m2m_dev);
90
91
struct
vb2_queue
*
v4l2_m2m_get_vq
(
struct
v4l2_m2m_ctx
*m2m_ctx,
92
enum
v4l2_buf_type
type
);
93
94
void
v4l2_m2m_job_finish
(
struct
v4l2_m2m_dev
*m2m_dev,
95
struct
v4l2_m2m_ctx
*m2m_ctx);
96
97
static
inline
void
98
v4l2_m2m_buf_done(
struct
vb2_buffer
*
buf
,
enum
vb2_buffer_state
state
)
99
{
100
vb2_buffer_done
(buf, state);
101
}
102
103
int
v4l2_m2m_reqbufs
(
struct
file
*
file
,
struct
v4l2_m2m_ctx
*m2m_ctx,
104
struct
v4l2_requestbuffers
*reqbufs);
105
106
int
v4l2_m2m_querybuf
(
struct
file
*
file
,
struct
v4l2_m2m_ctx
*m2m_ctx,
107
struct
v4l2_buffer
*
buf
);
108
109
int
v4l2_m2m_qbuf
(
struct
file
*
file
,
struct
v4l2_m2m_ctx
*m2m_ctx,
110
struct
v4l2_buffer
*
buf
);
111
int
v4l2_m2m_dqbuf
(
struct
file
*
file
,
struct
v4l2_m2m_ctx
*m2m_ctx,
112
struct
v4l2_buffer
*
buf
);
113
114
int
v4l2_m2m_streamon
(
struct
file
*
file
,
struct
v4l2_m2m_ctx
*m2m_ctx,
115
enum
v4l2_buf_type
type
);
116
int
v4l2_m2m_streamoff
(
struct
file
*
file
,
struct
v4l2_m2m_ctx
*m2m_ctx,
117
enum
v4l2_buf_type
type
);
118
119
unsigned
int
v4l2_m2m_poll
(
struct
file
*
file
,
struct
v4l2_m2m_ctx
*m2m_ctx,
120
struct
poll_table_struct
*
wait
);
121
122
int
v4l2_m2m_mmap
(
struct
file
*
file
,
struct
v4l2_m2m_ctx
*m2m_ctx,
123
struct
vm_area_struct
*vma);
124
125
struct
v4l2_m2m_dev
*
v4l2_m2m_init
(
struct
v4l2_m2m_ops
*
m2m_ops
);
126
void
v4l2_m2m_release
(
struct
v4l2_m2m_dev
*m2m_dev);
127
128
struct
v4l2_m2m_ctx
*
v4l2_m2m_ctx_init
(
struct
v4l2_m2m_dev
*
m2m_dev
,
129
void
*
drv_priv
,
130
int
(*queue_init)(
void
*
priv
,
struct
vb2_queue
*src_vq,
struct
vb2_queue
*dst_vq));
131
132
void
v4l2_m2m_ctx_release
(
struct
v4l2_m2m_ctx
*m2m_ctx);
133
134
void
v4l2_m2m_buf_queue
(
struct
v4l2_m2m_ctx
*m2m_ctx,
struct
vb2_buffer
*vb);
135
140
static
inline
141
unsigned
int
v4l2_m2m_num_src_bufs_ready(
struct
v4l2_m2m_ctx
*m2m_ctx)
142
{
143
return
m2m_ctx->
out_q_ctx
.num_rdy;
144
}
145
150
static
inline
151
unsigned
int
v4l2_m2m_num_dst_bufs_ready(
struct
v4l2_m2m_ctx
*m2m_ctx)
152
{
153
return
m2m_ctx->
cap_q_ctx
.num_rdy;
154
}
155
156
void
*
v4l2_m2m_next_buf
(
struct
v4l2_m2m_queue_ctx
*q_ctx);
157
162
static
inline
void
*v4l2_m2m_next_src_buf(
struct
v4l2_m2m_ctx
*m2m_ctx)
163
{
164
return
v4l2_m2m_next_buf
(&m2m_ctx->
out_q_ctx
);
165
}
166
171
static
inline
void
*v4l2_m2m_next_dst_buf(
struct
v4l2_m2m_ctx
*m2m_ctx)
172
{
173
return
v4l2_m2m_next_buf
(&m2m_ctx->
cap_q_ctx
);
174
}
175
179
static
inline
180
struct
vb2_queue
*v4l2_m2m_get_src_vq(
struct
v4l2_m2m_ctx
*m2m_ctx)
181
{
182
return
&m2m_ctx->
out_q_ctx
.q;
183
}
184
188
static
inline
189
struct
vb2_queue
*v4l2_m2m_get_dst_vq(
struct
v4l2_m2m_ctx
*m2m_ctx)
190
{
191
return
&m2m_ctx->
cap_q_ctx
.q;
192
}
193
194
void
*
v4l2_m2m_buf_remove
(
struct
v4l2_m2m_queue_ctx
*q_ctx);
195
200
static
inline
void
*v4l2_m2m_src_buf_remove(
struct
v4l2_m2m_ctx
*m2m_ctx)
201
{
202
return
v4l2_m2m_buf_remove
(&m2m_ctx->
out_q_ctx
);
203
}
204
209
static
inline
void
*v4l2_m2m_dst_buf_remove(
struct
v4l2_m2m_ctx
*m2m_ctx)
210
{
211
return
v4l2_m2m_buf_remove
(&m2m_ctx->
cap_q_ctx
);
212
}
213
214
#endif
/* _MEDIA_V4L2_MEM2MEM_H */
215
Generated on Thu Jan 10 2013 14:52:58 for Linux Kernel by
1.8.2