1/*
2 * Copyright 2015-2018, Dario Casalinuovo. 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
13namespace BPrivate { namespace media {
14
15
16typedef int64 media_client_id;
17typedef int64 media_connection_id;
18
19typedef uint64 media_client_kinds;
20typedef uint64 media_connection_kinds;
21
22
23enum 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
32enum media_connection_kind {
33	B_MEDIA_INPUT = 0,
34	B_MEDIA_OUTPUT = 1
35};
36
37
38typedef struct media_client {
39	media_client_id				Id() const;
40	media_client_kinds			Kinds() const;
41
42	BMessage*					ToMessage();
43
44private:
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 struct media_connection;
53} media_client;
54
55
56typedef 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
69private:
70	// NOTE: We are doing this on purpose to avoid redundancy we
71	// want to build the input/output on the fly. In pratice, the
72	// only thing that can change is the format which is kept updated
73	// to reflect the current status of this connection.
74	media_input					_BuildMediaInput() const;
75	media_output				_BuildMediaOutput() const;
76
77	media_node					_Node() 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
88    // This format always reflect the most updated format depending
89    // on the connection phase.
90    media_format				format;
91    char						name[B_MEDIA_NAME_LENGTH];
92
93	media_connection_kinds		kinds;
94	uint32						padding[16];
95
96	friend class BMediaClient;
97	friend class BMediaClientNode;
98	friend class BMediaConnection;
99	friend class BMediaInput;
100	friend class BMediaOutput;
101} media_connection;
102
103
104}
105
106}
107
108using namespace BPrivate::media;
109
110#endif
111