xref: /haiku/headers/private/media/experimental/MediaClientDefs.h (revision 0cc5ecb8ca33fbf36595076935537c05e2c48736)
1 /*
2  * Copyright 2015, Haiku, Inc. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  */
5 
6 #ifndef _MEDIA_CLIENT_DEFS_H
7 #define _MEDIA_CLIENT_DEFS_H
8 
9 #include <MediaDefs.h>
10 #include <MediaNode.h>
11 
12 
13 namespace BPrivate { namespace media {
14 
15 
16 typedef int64 media_client_id;
17 typedef int64 media_connection_id;
18 
19 typedef uint64 media_client_kinds;
20 typedef uint64 media_connection_kinds;
21 
22 
23 enum media_client_kind {
24 	// The client can receive media data.
25 	B_MEDIA_RECORDER		= 0x000000001,
26 	// The client can send media data to another client.
27 	B_MEDIA_PLAYER			= 0x000000002,
28 	// The client specify a control GUI which can be used to configure it.
29 	B_MEDIA_CONTROLLABLE	= 0x000000004
30 };
31 
32 enum media_connection_kind {
33 	B_MEDIA_INPUT = 0,
34 	B_MEDIA_OUTPUT = 1
35 };
36 
37 
38 typedef struct media_client {
39 	media_client_id				Id() const;
40 	media_client_kinds			Kinds() const;
41 
42 	BMessage*					ToMessage();
43 
44 private:
45 	media_client_kinds			kinds;
46 
47 	media_node					node;
48 	uint32						padding[16];
49 
50 	friend class BMediaClient;
51 	friend class BMediaConnection;
52 	friend class media_connection;
53 } media_client;
54 
55 
56 typedef struct media_connection {
57 	media_connection_id			Id() const;
58 	media_connection_kinds		Kinds() const;
59 
60 	const media_client&			Client() const;
61 
62 	const char*					Name() const;
63 
64 	bool						IsInput() const;
65 	bool						IsOutput() const;
66 
67 	BMessage*					ToMessage() const;
68 
69 private:
70 	media_input					_MediaInput() const;
71 	media_output				_MediaOutput() const;
72 
73 	const media_source&			_Source() const;
74 	const media_destination&	_Destination() const;
75 
76 	media_node					_Node() const;
77 	media_node					_RemoteNode() const;
78 
79 	media_connection_id			id;
80 
81 	media_client				client;
82 
83 	media_node					remote_node;
84 
85     media_source				source;
86     media_destination			destination;
87     media_format				format;
88     char						name[B_MEDIA_NAME_LENGTH];
89 
90 	media_connection_kinds		kinds;
91 	uint32						padding[16];
92 
93 	friend class BMediaClient;
94 	friend class BMediaClientNode;
95 	friend class BMediaConnection;
96 	friend class BMediaInput;
97 	friend class BMediaOutput;
98 } media_connection;
99 
100 
101 }
102 
103 }
104 
105 using namespace BPrivate::media;
106 
107 #endif
108