/* * Copyright 2002, Marcus Overhagen. All rights reserved. * Distributed under the terms of the MIT License. */ #ifndef _DATA_EXCHANGE_H #define _DATA_EXCHANGE_H #include #include #include #include namespace BPrivate { namespace media { namespace dataexchange { struct reply_data; struct request_data; // BMessage based data exchange with the media_server status_t SendToServer(BMessage *msg); status_t QueryServer(BMessage *request, BMessage *reply); // Raw data based data exchange with the media_server status_t SendToServer(int32 msgcode, void *msg, int size); status_t QueryServer(int32 msgcode, request_data *request, int requestsize, reply_data *reply, int replysize); // Raw data based data exchange with the media_addon_server status_t SendToAddonServer(int32 msgcode, void *msg, int size); status_t QueryAddonServer(int32 msgcode, request_data *request, int requestsize, reply_data *reply, int replysize); // Raw data based data exchange with the media_server status_t SendToPort(port_id sendport, int32 msgcode, void *msg, int size); status_t QueryPort(port_id requestport, int32 msgcode, request_data *request, int requestsize, reply_data *reply, int replysize); // The base struct used for all raw requests struct request_data { port_id reply_port; void SendReply(status_t result, reply_data *reply, int replysize) const; }; // The base struct used for all raw replys struct reply_data { status_t result; }; }; // dataexchange }; // media }; // BPrivate using namespace BPrivate::media::dataexchange; // BMessage based server communication enum { // BMediaRoster notification service MEDIA_SERVER_REQUEST_NOTIFICATIONS = 1000, MEDIA_SERVER_CANCEL_NOTIFICATIONS, MEDIA_SERVER_SEND_NOTIFICATIONS }; // Raw port based communication enum { SERVER_GET_NODE = 1000, SERVER_SET_NODE, SERVER_PUBLISH_INPUTS, SERVER_PUBLISH_OUTPUTS, CONSUMER_GET_NEXT_INPUT, CONSUMER_DISPOSE_INPUT_COOKIE, CONSUMER_ACCEPT_FORMAT, CONSUMER_CONNECTED, PRODUCER_GET_NEXT_OUTPUT, PRODUCER_DISPOSE_OUTPUT_COOKIE, PRODUCER_FORMAT_PROPOSAL, PRODUCER_PREPARE_TO_CONNECT, PRODUCER_CONNECT, }; // used by SERVER_GET_NODE and SERVER_SET_NODE enum node_type { VIDEO_INPUT, AUDIO_INPUT, VIDEO_OUTPUT, AUDIO_MIXER, AUDIO_OUTPUT, AUDIO_OUTPUT_EX, TIME_SOURCE, SYSTEM_TIME_SOURCE }; // used by SERVER_PUBLISH_INPUTS and SERVER_PUBLISH_OUTPUTS enum { MAX_OUTPUTS = 48, MAX_INPUTS = 48, }; struct addonserver_instantiate_dormant_node_request : public request_data { dormant_node_info info; }; struct addonserver_instantiate_dormant_node_reply : public reply_data { media_node node; }; struct server_set_node_request : public request_data { node_type type; bool use_node; media_node node; bool use_dni; dormant_node_info dni; bool use_input; media_input input; }; struct server_set_node_reply : public reply_data { }; struct server_get_node_request : public request_data { node_type type; }; struct server_get_node_reply : public reply_data { media_node node; // for AUDIO_OUTPUT_EX char input_name[B_MEDIA_NAME_LENGTH]; int32 input_id; }; struct producer_format_proposal_request : public request_data { media_source output; media_format format; }; struct producer_format_proposal_reply : public reply_data { media_format format; }; struct producer_prepare_to_connect_request : public request_data { media_source source; media_destination destination; media_format format; char name[B_MEDIA_NAME_LENGTH]; }; struct producer_prepare_to_connect_reply : public reply_data { media_format format; media_source out_source; char name[B_MEDIA_NAME_LENGTH]; }; struct producer_connect_request : public request_data { status_t error; media_source source; media_destination destination; media_format format; char name[B_MEDIA_NAME_LENGTH]; }; struct producer_connect_reply : public reply_data { char name[B_MEDIA_NAME_LENGTH]; }; struct consumer_accept_format_request : public request_data { media_destination dest; media_format format; }; struct consumer_accept_format_reply : public reply_data { media_format format; }; struct consumer_connected_request : public request_data { media_source producer; media_destination where; media_format with_format; }; struct consumer_connected_reply : public reply_data { media_input input; }; struct server_publish_inputs_request : public request_data { media_node node; int32 count; area_id area; // if count > MAX_INPUTS, inputs are in the area media_input inputs[MAX_INPUTS]; }; struct server_publish_inputs_reply : public reply_data { }; struct server_publish_outputs_request : public request_data { media_node node; int32 count; area_id area; // if count > MAX_OUTPUTS, outputs are in the area media_output outputs[MAX_OUTPUTS]; }; struct server_publish_outputs_reply : public reply_data { }; struct producer_get_next_output_request : public request_data { int32 cookie; }; struct producer_get_next_output_reply : public reply_data { int32 cookie; media_output output; }; struct producer_dispose_output_cookie_request : public request_data { int32 cookie; }; struct producer_dispose_output_cookie_reply : public reply_data { }; struct consumer_get_next_input_request : public request_data { int32 cookie; }; struct consumer_get_next_input_reply : public reply_data { int32 cookie; media_input input; }; struct consumer_dispose_input_cookie_request : public request_data { int32 cookie; }; struct consumer_dispose_input_cookie_reply : public reply_data { }; #endif // _DATA_EXCHANGE_H