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