PrivMX Endpoint v2.8.0
Loading...
Searching...
No Matches
OnTrackInterface.hpp
1#ifndef _PRIVMXLIB_ENDPOINT_STREAM_ONTRACKINTERFACE_HPP
2#define _PRIVMXLIB_ENDPOINT_STREAM_ONTRACKINTERFACE_HPP
3
4#include <functional>
5#include <memory>
6#include <optional>
7#include <privmx/endpoint/stream/Types.hpp>
8#include <string>
9#include <vector>
10
11namespace privmx {
12namespace endpoint {
13namespace stream {
14
18enum TrackAction {
22 REMOVED,
23
27 ADDED
28};
29
33enum DataType {
37 VIDEO,
38
42 AUDIO,
43
47 PLAIN
48};
49
53struct Track {
57 DataType kind;
58
62 std::vector<std::string> streamIds;
63
67 std::string trackId;
68
72 bool muted;
73
78 std::function<void(bool)> updateMute;
79};
80
86struct Data {
90 Data(DataType _type, const std::vector<std::string>& _streamIds, const std::string& _track)
91 : type(_type), streamIds(_streamIds), track(_track) {}
92
96 virtual ~Data() = default;
97
101 DataType type;
102
106 const std::vector<std::string> streamIds;
107
111 const std::string track;
112};
113
117class Frame {
118public:
129 virtual int ConvertToRGBA(uint8_t* dst_argb, int dst_stride_argb, int dest_width, int dest_height) = 0;
130};
131
135struct VideoData : public Data {
140 const std::vector<std::string>& _streamIds,
141 const std::string& _track,
142 const int64_t _w,
143 const int64_t _h,
144 std::shared_ptr<Frame> _frameData
145 )
146 : Data(DataType::VIDEO, _streamIds, _track), w(_w), h(_h), frameData(_frameData) {}
147
151 const int64_t w;
152
156 const int64_t h;
157
161 std::shared_ptr<Frame> frameData;
162};
163
167struct AudioData : public Data {
172 const std::vector<std::string>& _streamIds,
173 const std::string& _track,
174 const void* _audio_data,
175 int _bits_per_sample,
176 int _sample_rate,
177 size_t _number_of_channels,
178 size_t _number_of_frames
179 )
180 : Data(DataType::AUDIO, _streamIds, _track), audio_data(_audio_data), bits_per_sample(_bits_per_sample),
181 sample_rate(_sample_rate), number_of_channels(_number_of_channels), number_of_frames(_number_of_frames) {}
182
186 const void* audio_data;
187
192
197
202
207};
208
212struct PlainData : public Data {
217 const std::vector<std::string>& _streamIds,
218 const std::string& _track,
219 const core::Buffer& _data,
220 const uint64_t& _seq,
221 bool _binary,
222 const uint64_t& _statusCode
223 )
224 : Data(DataType::PLAIN, _streamIds, _track), data(_data), seq(_seq), binary(_binary), statusCode(_statusCode) {}
225
230
234 uint64_t seq;
235
239 bool binary;
240
245 uint64_t statusCode;
246};
247
256public:
263 virtual void OnRemoteTrack(Track tack, TrackAction action) = 0;
264
274 virtual void OnData(std::shared_ptr<Data> data) = 0;
275
276protected:
280 virtual ~OnTrackInterface() = default;
281};
282
283} // namespace stream
284} // namespace endpoint
285} // namespace privmx
286
287#endif // _PRIVMXLIB_ENDPOINT_STREAM_ONTRACKINTERFACE_HPP
Definition Buffer.hpp:13
Definition OnTrackInterface.hpp:117
virtual int ConvertToRGBA(uint8_t *dst_argb, int dst_stride_argb, int dest_width, int dest_height)=0
Definition OnTrackInterface.hpp:255
virtual void OnRemoteTrack(Track tack, TrackAction action)=0
virtual void OnData(std::shared_ptr< Data > data)=0
size_t number_of_channels
Definition OnTrackInterface.hpp:201
int bits_per_sample
Definition OnTrackInterface.hpp:191
size_t number_of_frames
Definition OnTrackInterface.hpp:206
const void * audio_data
Definition OnTrackInterface.hpp:186
AudioData(const std::vector< std::string > &_streamIds, const std::string &_track, const void *_audio_data, int _bits_per_sample, int _sample_rate, size_t _number_of_channels, size_t _number_of_frames)
Definition OnTrackInterface.hpp:171
int sample_rate
Definition OnTrackInterface.hpp:196
const std::string track
Definition OnTrackInterface.hpp:111
const std::vector< std::string > streamIds
Definition OnTrackInterface.hpp:106
Data(DataType _type, const std::vector< std::string > &_streamIds, const std::string &_track)
Definition OnTrackInterface.hpp:90
DataType type
Definition OnTrackInterface.hpp:101
core::Buffer data
Definition OnTrackInterface.hpp:229
PlainData(const std::vector< std::string > &_streamIds, const std::string &_track, const core::Buffer &_data, const uint64_t &_seq, bool _binary, const uint64_t &_statusCode)
Definition OnTrackInterface.hpp:216
bool binary
Definition OnTrackInterface.hpp:239
uint64_t seq
Definition OnTrackInterface.hpp:234
uint64_t statusCode
Definition OnTrackInterface.hpp:245
Definition OnTrackInterface.hpp:53
std::vector< std::string > streamIds
Definition OnTrackInterface.hpp:62
std::function< void(bool)> updateMute
Definition OnTrackInterface.hpp:78
DataType kind
Definition OnTrackInterface.hpp:57
std::string trackId
Definition OnTrackInterface.hpp:67
bool muted
Definition OnTrackInterface.hpp:72
const int64_t w
Definition OnTrackInterface.hpp:151
const int64_t h
Definition OnTrackInterface.hpp:156
VideoData(const std::vector< std::string > &_streamIds, const std::string &_track, const int64_t _w, const int64_t _h, std::shared_ptr< Frame > _frameData)
Definition OnTrackInterface.hpp:139
std::shared_ptr< Frame > frameData
Definition OnTrackInterface.hpp:161