1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#ifndef MMAL_VCHIQ_H
17#define MMAL_VCHIQ_H
18
19#include "mmal-common.h"
20#include "mmal-msg-format.h"
21
22#define MAX_PORT_COUNT 4
23
24
25#define MMAL_FORMAT_EXTRADATA_MAX_SIZE 128
26
27struct vchiq_mmal_instance;
28
29enum vchiq_mmal_es_type {
30 MMAL_ES_TYPE_UNKNOWN,
31 MMAL_ES_TYPE_CONTROL,
32 MMAL_ES_TYPE_AUDIO,
33 MMAL_ES_TYPE_VIDEO,
34 MMAL_ES_TYPE_SUBPICTURE
35};
36
37struct vchiq_mmal_port_buffer {
38 unsigned int num;
39 u32 size;
40 u32 alignment;
41};
42
43struct vchiq_mmal_port;
44
45typedef void (*vchiq_mmal_buffer_cb)(
46 struct vchiq_mmal_instance *instance,
47 struct vchiq_mmal_port *port,
48 int status, struct mmal_buffer *buffer);
49
50struct vchiq_mmal_port {
51 u32 enabled:1;
52 u32 handle;
53 u32 type;
54 u32 index;
55
56
57 struct vchiq_mmal_component *component;
58
59 struct vchiq_mmal_port *connected;
60
61
62 struct vchiq_mmal_port_buffer minimum_buffer;
63 struct vchiq_mmal_port_buffer recommended_buffer;
64 struct vchiq_mmal_port_buffer current_buffer;
65
66
67 struct mmal_es_format_local format;
68
69 union mmal_es_specific_format es;
70
71
72 struct list_head buffers;
73
74 spinlock_t slock;
75
76
77 atomic_t buffers_with_vpu;
78
79 vchiq_mmal_buffer_cb buffer_cb;
80
81 void *cb_ctx;
82};
83
84struct vchiq_mmal_component {
85 u32 in_use:1;
86 u32 enabled:1;
87 u32 handle;
88 u32 inputs;
89 u32 outputs;
90 u32 clocks;
91 struct vchiq_mmal_port control;
92 struct vchiq_mmal_port input[MAX_PORT_COUNT];
93 struct vchiq_mmal_port output[MAX_PORT_COUNT];
94 struct vchiq_mmal_port clock[MAX_PORT_COUNT];
95 u32 client_component;
96};
97
98int vchiq_mmal_init(struct vchiq_mmal_instance **out_instance);
99int vchiq_mmal_finalise(struct vchiq_mmal_instance *instance);
100
101
102
103
104int vchiq_mmal_component_init(
105 struct vchiq_mmal_instance *instance,
106 const char *name,
107 struct vchiq_mmal_component **component_out);
108
109int vchiq_mmal_component_finalise(
110 struct vchiq_mmal_instance *instance,
111 struct vchiq_mmal_component *component);
112
113int vchiq_mmal_component_enable(
114 struct vchiq_mmal_instance *instance,
115 struct vchiq_mmal_component *component);
116
117int vchiq_mmal_component_disable(
118 struct vchiq_mmal_instance *instance,
119 struct vchiq_mmal_component *component);
120
121
122
123
124
125
126int vchiq_mmal_port_enable(
127 struct vchiq_mmal_instance *instance,
128 struct vchiq_mmal_port *port,
129 vchiq_mmal_buffer_cb buffer_cb);
130
131
132
133
134
135int vchiq_mmal_port_disable(struct vchiq_mmal_instance *instance,
136 struct vchiq_mmal_port *port);
137
138int vchiq_mmal_port_parameter_set(struct vchiq_mmal_instance *instance,
139 struct vchiq_mmal_port *port,
140 u32 parameter,
141 void *value,
142 u32 value_size);
143
144int vchiq_mmal_port_parameter_get(struct vchiq_mmal_instance *instance,
145 struct vchiq_mmal_port *port,
146 u32 parameter,
147 void *value,
148 u32 *value_size);
149
150int vchiq_mmal_port_set_format(struct vchiq_mmal_instance *instance,
151 struct vchiq_mmal_port *port);
152
153int vchiq_mmal_port_connect_tunnel(struct vchiq_mmal_instance *instance,
154 struct vchiq_mmal_port *src,
155 struct vchiq_mmal_port *dst);
156
157int vchiq_mmal_version(struct vchiq_mmal_instance *instance,
158 u32 *major_out,
159 u32 *minor_out);
160
161int vchiq_mmal_submit_buffer(struct vchiq_mmal_instance *instance,
162 struct vchiq_mmal_port *port,
163 struct mmal_buffer *buf);
164
165int mmal_vchi_buffer_init(struct vchiq_mmal_instance *instance,
166 struct mmal_buffer *buf);
167int mmal_vchi_buffer_cleanup(struct mmal_buffer *buf);
168#endif
169