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