xref: /haiku/headers/private/media/DataExchange.h (revision 3620737cb79cb28d11eba8a7396a4d0f00fc512d)
1 /*
2  * Copyright 2002, Marcus Overhagen. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  */
5 
6 #ifndef _DATA_EXCHANGE_H
7 #define _DATA_EXCHANGE_H
8 
9 #include <MediaDefs.h>
10 #include <MediaNode.h>
11 #include <MediaAddOn.h>
12 #include <Entry.h>
13 
14 namespace BPrivate {
15 namespace media {
16 namespace dataexchange {
17 
18 struct reply_data;
19 struct request_data;
20 
21 // BMessage based data exchange with the media_server
22 status_t SendToServer(BMessage *msg);
23 status_t QueryServer(BMessage *request, BMessage *reply);
24 
25 // Raw data based data exchange with the media_server
26 status_t SendToServer(int32 msgcode, void *msg, int size);
27 status_t QueryServer(int32 msgcode, request_data *request, int requestsize, reply_data *reply, int replysize);
28 
29 // Raw data based data exchange with the media_addon_server
30 status_t SendToAddonServer(int32 msgcode, void *msg, int size);
31 status_t QueryAddonServer(int32 msgcode, request_data *request, int requestsize, reply_data *reply, int replysize);
32 
33 // Raw data based data exchange with the media_server
34 status_t SendToPort(port_id sendport, int32 msgcode, void *msg, int size);
35 status_t QueryPort(port_id requestport, int32 msgcode, request_data *request, int requestsize, reply_data *reply, int replysize);
36 
37 // The base struct used for all raw requests
38 struct request_data
39 {
40 	port_id reply_port;
41 
42 	void SendReply(status_t result, reply_data *reply, int replysize) const;
43 };
44 
45 // The base struct used for all raw replys
46 struct reply_data
47 {
48 	status_t result;
49 };
50 
51 
52 }; // dataexchange
53 }; // media
54 }; // BPrivate
55 
56 using namespace BPrivate::media::dataexchange;
57 
58 // BMessage based server communication
59 enum {
60 
61 	// BMediaRoster notification service
62 	MEDIA_SERVER_REQUEST_NOTIFICATIONS = 1000,
63 	MEDIA_SERVER_CANCEL_NOTIFICATIONS,
64 	MEDIA_SERVER_SEND_NOTIFICATIONS
65 
66 };
67 
68 // Raw port based communication
69 enum {
70 	SERVER_GET_NODE = 1000,
71 	SERVER_SET_NODE,
72 	SERVER_PUBLISH_INPUTS,
73 	SERVER_PUBLISH_OUTPUTS,
74 	CONSUMER_GET_NEXT_INPUT,
75 	CONSUMER_DISPOSE_INPUT_COOKIE,
76 	CONSUMER_ACCEPT_FORMAT,
77 	CONSUMER_CONNECTED,
78 	PRODUCER_GET_NEXT_OUTPUT,
79 	PRODUCER_DISPOSE_OUTPUT_COOKIE,
80 	PRODUCER_FORMAT_PROPOSAL,
81 	PRODUCER_PREPARE_TO_CONNECT,
82 	PRODUCER_CONNECT,
83 };
84 
85 // used by SERVER_GET_NODE and SERVER_SET_NODE
86 enum node_type
87 {
88 	VIDEO_INPUT,
89 	AUDIO_INPUT,
90 	VIDEO_OUTPUT,
91 	AUDIO_MIXER,
92 	AUDIO_OUTPUT,
93 	AUDIO_OUTPUT_EX,
94 	TIME_SOURCE,
95 	SYSTEM_TIME_SOURCE
96 };
97 
98 // used by SERVER_PUBLISH_INPUTS and SERVER_PUBLISH_OUTPUTS
99 enum
100 {
101 	MAX_OUTPUTS = 48,
102 	MAX_INPUTS = 48,
103 };
104 
105 struct addonserver_instantiate_dormant_node_request : public request_data
106 {
107 	dormant_node_info info;
108 };
109 
110 struct addonserver_instantiate_dormant_node_reply : public reply_data
111 {
112 	media_node node;
113 };
114 
115 struct server_set_node_request : public request_data
116 {
117 	node_type type;
118 	bool use_node;
119 	media_node node;
120 	bool use_dni;
121 	dormant_node_info dni;
122 	bool use_input;
123 	media_input input;
124 };
125 
126 struct server_set_node_reply : public reply_data
127 {
128 };
129 
130 struct server_get_node_request : public request_data
131 {
132 	node_type type;
133 };
134 
135 struct server_get_node_reply : public reply_data
136 {
137 	media_node node;
138 
139 	// for AUDIO_OUTPUT_EX
140 	char input_name[B_MEDIA_NAME_LENGTH];
141 	int32 input_id;
142 };
143 
144 struct producer_format_proposal_request : public request_data
145 {
146 	media_source output;
147 	media_format format;
148 };
149 
150 struct producer_format_proposal_reply : public reply_data
151 {
152 	media_format format;
153 };
154 
155 struct producer_prepare_to_connect_request : public request_data
156 {
157 	media_source source;
158 	media_destination destination;
159 	media_format format;
160 	char name[B_MEDIA_NAME_LENGTH];
161 };
162 
163 struct producer_prepare_to_connect_reply : public reply_data
164 {
165 	media_format format;
166 	media_source out_source;
167 	char name[B_MEDIA_NAME_LENGTH];
168 };
169 
170 struct producer_connect_request : public request_data
171 {
172 	status_t error;
173 	media_source source;
174 	media_destination destination;
175 	media_format format;
176 	char name[B_MEDIA_NAME_LENGTH];
177 };
178 
179 struct producer_connect_reply : public reply_data
180 {
181 	char name[B_MEDIA_NAME_LENGTH];
182 };
183 
184 struct consumer_accept_format_request : public request_data
185 {
186 	media_destination dest;
187 	media_format format;
188 };
189 
190 struct consumer_accept_format_reply : public reply_data
191 {
192 	media_format format;
193 };
194 
195 struct consumer_connected_request : public request_data
196 {
197 	media_source producer;
198 	media_destination where;
199 	media_format with_format;
200 };
201 
202 struct consumer_connected_reply : public reply_data
203 {
204 	media_input input;
205 };
206 
207 struct server_publish_inputs_request : public request_data
208 {
209 	media_node node;
210 	int32 count;
211 	area_id area; // if count > MAX_INPUTS, inputs are in the area
212 	media_input inputs[MAX_INPUTS];
213 };
214 
215 struct server_publish_inputs_reply : public reply_data
216 {
217 };
218 
219 struct server_publish_outputs_request : public request_data
220 {
221 	media_node node;
222 	int32 count;
223 	area_id area; // if count > MAX_OUTPUTS, outputs are in the area
224 	media_output outputs[MAX_OUTPUTS];
225 };
226 
227 struct server_publish_outputs_reply : public reply_data
228 {
229 };
230 
231 struct producer_get_next_output_request : public request_data
232 {
233 	int32 cookie;
234 };
235 
236 struct producer_get_next_output_reply : public reply_data
237 {
238 	int32 cookie;
239 	media_output output;
240 };
241 
242 struct producer_dispose_output_cookie_request : public request_data
243 {
244 	int32 cookie;
245 };
246 
247 struct producer_dispose_output_cookie_reply : public reply_data
248 {
249 };
250 
251 struct consumer_get_next_input_request : public request_data
252 {
253 	int32 cookie;
254 };
255 
256 struct consumer_get_next_input_reply : public reply_data
257 {
258 	int32 cookie;
259 	media_input input;
260 };
261 
262 struct consumer_dispose_input_cookie_request : public request_data
263 {
264 	int32 cookie;
265 };
266 
267 struct consumer_dispose_input_cookie_reply : public reply_data
268 {
269 };
270 
271 #endif // _DATA_EXCHANGE_H
272