Ring Daemon 16.0.0
Loading...
Searching...
No Matches
media_attribute.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2004-2025 Savoir-faire Linux Inc.
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <https://www.gnu.org/licenses/>.
16 */
17#pragma once
18
19#ifdef HAVE_CONFIG_H
20#include "config.h"
21#endif
22
23#include "media/media_codec.h"
24#include "jami.h"
25
26namespace jami {
27
29{
30public:
32 bool muted = false,
33 bool secure = true,
34 bool enabled = false,
35 std::string_view source = {},
36 std::string_view label = {},
37 bool onHold = false)
38 : type_(type)
39 , muted_(muted)
40 , secure_(secure)
41 , enabled_(enabled)
42 , sourceUri_(source)
43 , label_(label)
44 , onHold_(onHold)
45 {}
46
47 MediaAttribute(const libjami::MediaMap& mediaMap, bool secure);
48
49 static std::vector<MediaAttribute> buildMediaAttributesList(
50 const std::vector<libjami::MediaMap>& mediaList, bool secure);
51
52 static MediaType stringToMediaType(const std::string& mediaType);
53
54 static std::pair<bool, MediaType> getMediaType(const libjami::MediaMap& map);
55
56 static std::pair<bool, bool> getBoolValue(const libjami::MediaMap& mediaMap,
57 const std::string& key);
58
59 static std::pair<bool, std::string> getStringValue(const libjami::MediaMap& mediaMap,
60 const std::string& key);
61
62 // Return true if at least one media has a matching type.
63 static bool hasMediaType(const std::vector<MediaAttribute>& mediaList, MediaType type);
64
65 // Return a string of a boolean
66 static char const* boolToString(bool val);
67
68 // Return a string of the media type
69 static char const* mediaTypeToString(MediaType type);
70
71 // Convert MediaAttribute to MediaMap
72 static libjami::MediaMap toMediaMap(const MediaAttribute& mediaAttr);
73
74 // Serialize a vector of MediaAttribute to a vector of MediaMap
75 static std::vector<libjami::MediaMap> mediaAttributesToMediaMaps(
76 std::vector<MediaAttribute> mediaAttrList);
77
78 std::string toString(bool full = false) const;
79
81 bool muted_ {false};
82 bool secure_ {true};
83 bool enabled_ {false};
84 std::string sourceUri_ {};
85 std::string label_ {};
86 bool onHold_ {false};
87
88 // NOTE: the hold and mute attributes are related but not
89 // tightly coupled. A hold/unhold operation should always
90 // trigger a new re-invite to notify the change in media
91 // direction. For instance, on an active call, the hold action
92 // would change the media direction attribute from "sendrecv"
93 // to "sendonly". A new SDP with the new media direction will
94 // be generated and sent to the peer in the re-invite.
95 // In contrast, the mute attribute is a local attribute, and
96 // describes the presence (or absence) of the media signal in
97 // the stream. In other words, the mute action can be performed
98 // with or without a media direction change (no re-invite).
99 // For instance, muting the audio can be done by disabling the
100 // audio input (capture) of the encoding session, resulting in
101 // sending RTP packets without actual audio (silence).
102
103 bool hasValidVideo();
104};
105} // namespace jami
static MediaType stringToMediaType(const std::string &mediaType)
static std::vector< MediaAttribute > buildMediaAttributesList(const std::vector< libjami::MediaMap > &mediaList, bool secure)
static std::pair< bool, MediaType > getMediaType(const libjami::MediaMap &map)
static bool hasMediaType(const std::vector< MediaAttribute > &mediaList, MediaType type)
MediaAttribute(MediaType type=MediaType::MEDIA_NONE, bool muted=false, bool secure=true, bool enabled=false, std::string_view source={}, std::string_view label={}, bool onHold=false)
std::string toString(bool full=false) const
static std::pair< bool, std::string > getStringValue(const libjami::MediaMap &mediaMap, const std::string &key)
static char const * mediaTypeToString(MediaType type)
static libjami::MediaMap toMediaMap(const MediaAttribute &mediaAttr)
static std::pair< bool, bool > getBoolValue(const libjami::MediaMap &mediaMap, const std::string &key)
static std::vector< libjami::MediaMap > mediaAttributesToMediaMaps(std::vector< MediaAttribute > mediaAttrList)
static char const * boolToString(bool val)
void emitSignal(Args... args)
Definition ring_signal.h:64
@ MEDIA_NONE
Definition media_codec.h:46
std::map< std::string, std::string > MediaMap
Definition jami.h:275