PrivMX
DOCS
PrivMX Endpoint
v2.7.5
v2.7.5
Loading...
Searching...
No Matches
OnTrackInterface.hpp
1
#ifndef _PRIVMXLIB_ENDPOINT_STREAM_ONTRACKINTERFACE_HPP
2
#define _PRIVMXLIB_ENDPOINT_STREAM_ONTRACKINTERFACE_HPP
3
4
#include <string>
5
#include <optional>
6
#include "privmx/endpoint/stream/webrtc/Types.hpp"
7
#include <privmx/endpoint/stream/Types.hpp>
8
9
namespace
privmx {
10
namespace
endpoint {
11
namespace
stream {
12
13
enum
TrackAction {
14
REMOVED,
15
ADDED
16
};
17
enum
DataType {
18
VIDEO,
19
AUDIO,
20
PLAIN
21
};
22
struct
Track
{
23
DataType kind;
24
std::vector<std::string> streamIds;
25
std::string trackId;
26
bool
muted;
27
std::function<void(
bool
)> updateMute;
28
};
29
struct
TrackEvent
{
30
std::string id;
31
std::optional<Track> track;
32
Stream
stream;
33
};
34
struct
Data {
35
Data(DataType _type,
const
std::vector<std::string>& _streamIds,
const
std::string& _track)
36
: type(_type), streamIds(_streamIds), track(_track) {}
37
virtual
~Data() =
default
;
38
DataType type;
39
const
std::vector<std::string> streamIds;
40
const
std::string track;
41
};
42
43
class
Frame
{
44
public
:
45
virtual
int
ConvertToRGBA(uint8_t* dst_argb,
int
dst_stride_argb,
int
dest_width,
int
dest_height) = 0;
46
};
47
48
struct
VideoData :
public
Data {
49
VideoData(
const
std::vector<std::string>& _streamIds,
const
std::string& _track,
const
int64_t _w,
const
int64_t _h, std::shared_ptr<Frame> _frameData )
50
: Data(DataType::VIDEO, _streamIds, _track), w(_w), h(_h), frameData(_frameData) {}
51
const
int64_t w;
52
const
int64_t h;
53
std::shared_ptr<Frame> frameData;
54
};
55
struct
AudioData :
public
Data {
56
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)
57
: Data(DataType::AUDIO, _streamIds, _track), audio_data(_audio_data), bits_per_sample(_bits_per_sample), sample_rate(_sample_rate), number_of_channels(_number_of_channels), number_of_frames(_number_of_frames) {}
58
const
void
* audio_data;
59
int
bits_per_sample;
60
int
sample_rate;
61
size_t
number_of_channels;
62
size_t
number_of_frames;
63
};
64
struct
PlainData :
public
Data {
65
PlainData(
const
std::vector<std::string>& _streamIds,
const
std::string& _track,
const
core::Buffer
& _data,
const
uint64_t& _seq,
bool
_binary)
66
: Data(DataType::PLAIN, _streamIds, _track), data(_data), seq(_seq), binary(_binary) {}
67
core::Buffer
data;
68
uint64_t seq;
69
bool
binary;
70
};
71
72
class
OnTrackInterface
{
73
public
:
74
virtual
void
OnRemoteTrack(
Track
tack, TrackAction action) = 0;
75
virtual
void
OnData(std::shared_ptr<Data> data) = 0;
76
protected
:
77
virtual
~OnTrackInterface
() =
default
;
78
};
79
80
}
// namespace stream
81
}
// namespace endpoint
82
}
// namespace privmx
83
84
#endif
// _PRIVMXLIB_ENDPOINT_STREAM_ONTRACKINTERFACE_HPP
privmx::endpoint::core::Buffer
Definition
Buffer.hpp:13
privmx::endpoint::stream::Frame
Definition
OnTrackInterface.hpp:43
privmx::endpoint::stream::OnTrackInterface
Definition
OnTrackInterface.hpp:72
privmx::endpoint::stream::Stream
Definition
Types.hpp:60
privmx::endpoint::stream::TrackEvent
Definition
OnTrackInterface.hpp:29
privmx::endpoint::stream::Track
Definition
OnTrackInterface.hpp:22
webrtc
include_pub
privmx
endpoint
stream
webrtc
OnTrackInterface.hpp