savoirfairelinux issueshttps://git.jami.net/groups/savoirfairelinux/-/issues2022-08-15T21:06:12Zhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/741Voice activity detection => Fix jittering2022-08-15T21:06:12ZMehdi GhayourVoice activity detection => Fix jitteringTobias HildebrandtSébastien BlinAline Gondim SantosTobias Hildebrandthttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/731Distorted video for conferences on video-split (DBUS)2022-04-13T13:14:38ZSébastien BlinDistorted video for conferences on video-split (DBUS)# Scenario
+ Build with --no-libwrap
+ Do a conference, go in one big with small layout
# Expected
Video should be ok
# Current result
video is distorted# Scenario
+ Build with --no-libwrap
+ Do a conference, go in one big with small layout
# Expected
Video should be ok
# Current result
video is distortedMohamed ChibaniAline Gondim SantosSébastien BlinMohamed Chibanihttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/727Camera not opening if rdv host joins2023-02-17T13:51:27ZSébastien BlinCamera not opening if rdv host joins# Scenario
+ Alice is a rdv host
+ Bob calls alice (he will be alone in a rdv)
+ Alice joins the call
# Expected
+ Alice and Bob should see their video in the rdv
# Current
+ Alice's camera is not opening and mute is broken
# Obser...# Scenario
+ Alice is a rdv host
+ Bob calls alice (he will be alone in a rdv)
+ Alice joins the call
# Expected
+ Alice and Bob should see their video in the rdv
# Current
+ Alice's camera is not opening and mute is broken
# Observation
+ Device is busy and not opening
+ The camera become unusable for all apps as busy, even after leaving jamihttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/723Mediademuxer: buffer can increase2022-02-16T21:47:04ZSébastien BlinMediademuxer: buffer can increaseIn MediaDemuxer::decode():
`av_read_frame` only return one frame of the video buffer. However, if the CPU is too slow to decode (should not happen, but still), frames can just be stored and the video buffer can increase with a big maxim...In MediaDemuxer::decode():
`av_read_frame` only return one frame of the video buffer. However, if the CPU is too slow to decode (should not happen, but still), frames can just be stored and the video buffer can increase with a big maximum.
This should never happen. If the video buffer gets too big, the video will have a big delay.
But we also should not hide other problems. So, potential solution:
Check the size of the internal video buffer and log if too big before flushing.https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/719Call Audio Recording Not Working2022-07-13T13:28:17ZtrymeoutCall Audio Recording Not WorkingRecording files are not made when the call is an audio only. I would expect a audio or video file to be generated when recording a call were no ones camera is on.Recording files are not made when the call is an audio only. I would expect a audio or video file to be generated when recording a call were no ones camera is on.Sébastien BlinSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/713Conference layout seems broken after 25+ participants2024-02-14T14:07:15ZSébastien BlinConference layout seems broken after 25+ participants# Scenario
+ Start a conference with 25 participants
+ Another participant join
# Expected
+ The layout should be updated
# Current result
Seems blocked to the previous view# Scenario
+ Start a conference with 25 participants
+ Another participant join
# Expected
+ The layout should be updated
# Current result
Seems blocked to the previous viewBackloghttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/709Lag with decodingAccelerated: true2022-03-17T19:55:39ZSébastien BlinLag with decodingAccelerated: trueIn fact I see 3 bugs:
1. In `SinkClient::update`
doTransfer is True even if video-split is not used yet (cf Conference::sendConferenceInfos(), no delay if createSinks is commented). This must be false if sink is not used. This means th...In fact I see 3 bugs:
1. In `SinkClient::update`
doTransfer is True even if video-split is not used yet (cf Conference::sendConferenceInfos(), no delay if createSinks is commented). This must be false if sink is not used. This means that registerSinkClient is done in LRC even if sink is not used
2. HAVE_SHM is true if libwrap is true in LRC. We should change the configure to have enable-shm with dbus and not with libwrap.
3. `HardwareAccel::transferToMainMemory` is called for every participant, for every sink client. It should be done only once and then cropped by the sink clients.https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/708Medias: Big lag when a lot of person leave the conference2022-08-19T14:41:44ZSébastien BlinMedias: Big lag when a lot of person leave the conference# Scenario
+ Be in a rdv with 10 people
+ Every body leave except 2 people
# Current result
+ Big lag on video
# Expected
+ No lag# Scenario
+ Be in a rdv with 10 people
+ Every body leave except 2 people
# Current result
+ Big lag on video
# Expected
+ No laghttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/707Participant has green video during conference2023-03-14T19:21:54ZAndreas TraczykParticipant has green video during conference- this effect seems to present only when opening the camera at certain resolutions- this effect seems to present only when opening the camera at certain resolutionshttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/699Conference: Show remote recording indication for non-host in a conference2022-10-12T13:42:32ZSébastien BlinConference: Show remote recording indication for non-host in a conference# Scenario
+ Start a conf A(host),B,C
+ B start to record
# Current result
only A,B have the remote recording indication
# Expected
C show the remote recording# Scenario
+ Start a conf A(host),B,C
+ B start to record
# Current result
only A,B have the remote recording indication
# Expected
C show the remote recordingSébastien BlinSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/693Provide parameters for pulseaudio's echo-cancel-module2022-12-30T20:58:13ZAmin BandaliProvide parameters for pulseaudio's echo-cancel-moduleWe currently don't set any additional arguments for pulseaudio's echo canceller module:
https://git.jami.net/savoirfairelinux/ring-daemon/-/blob/504e54608267a257e14acc84daea236b1fd4f85a/src/media/audio/pulseaudio/audiostream.cpp#L59
V...We currently don't set any additional arguments for pulseaudio's echo canceller module:
https://git.jami.net/savoirfairelinux/ring-daemon/-/blob/504e54608267a257e14acc84daea236b1fd4f85a/src/media/audio/pulseaudio/audiostream.cpp#L59
Various GNU/Linux distributions such as Debian and its derivatives don't load the echo canceller module in `/etc/pulseaudio/default.pa` at all or with any additional parameters, so we can't rely on that.
We should look into providing additional arguments -- like the ones below -- ourselves when creating the pulseaudio stream.
For reference: example of loading the echo canceller module with additional arguments in a pulseaudio config file (thanks @atraczyk):
```
load-module module-echo-cancel use_volume_sharing=1 use_master_format=1 aec_method=webrtc aec_args="digital_gain_control=1 experimental_agc=1 analog_gain_control=0 noise_suppression=1 voice_detection=1 extended_filter=1" source_name=echoCancel_source sink_name=echoCancel_sink
```https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/692Support " echoCanceller: software"2022-08-15T21:08:19ZSébastien BlinSupport " echoCanceller: software"Webrtc should be enabled with echoCanceller: software in the dring.yml
For now "echoCanceller: system" is only used in pulselayer to do `bool ec = preference_.getEchoCanceller() == "system";`Webrtc should be enabled with echoCanceller: software in the dring.yml
For now "echoCanceller: system" is only used in pulselayer to do `bool ec = preference_.getEchoCanceller() == "system";`https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/691Unable to record in rdv with 1 participant2022-12-17T02:31:59ZSébastien BlinUnable to record in rdv with 1 participantIn 5290aebec9af6054e20212496db8452045aca7a6 we have this weird condition
```
#ifdef ENABLE_VIDEO
if (mediaReady_.at("a:local") and mediaReady_.at("a:remote") and mediaReady_.at("v:remote")) {
if (Manager::instance().videoPre...In 5290aebec9af6054e20212496db8452045aca7a6 we have this weird condition
```
#ifdef ENABLE_VIDEO
if (mediaReady_.at("a:local") and mediaReady_.at("a:remote") and mediaReady_.at("v:remote")) {
if (Manager::instance().videoPreferences.getRecordPreview() or mediaReady_.at("v:local"))
readyToRecord_ = true;
}
#endif
```
But this isn't called when calling a rdv with only 1 person
# Scenario
+ Device A call Device B (rdv)
+ A is in a call alone
+ A press on record
# Expected
+ readyToRecord_ should be set and the record be able to launchAline Gondim SantosAline Gondim Santoshttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/689Update our code and test due to FFmpeg new release2022-08-04T11:59:59ZMehdi GhayourUpdate our code and test due to FFmpeg new releaseIt's not the priority at the moment, we'll handle it later and will consider a timeline aligned with the product.It's not the priority at the moment, we'll handle it later and will consider a timeline aligned with the product.Aline Gondim SantosAline Gondim Santoshttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/679Crash on Windows when making a video call to iPhone X device without hwaccel2021-12-21T15:56:31ZAndreas TraczykCrash on Windows when making a video call to iPhone X device without hwaccelReproducibility varies and seems based on network conditions.Reproducibility varies and seems based on network conditions.https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/677Participant has green video during conference2021-12-23T21:56:21ZAndreas TraczykParticipant has green video during conference- this effect seems to present only when opening the camera at certain resolutions- this effect seems to present only when opening the camera at certain resolutionshttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/666Call re-invite - restart media only after successful ICE negotiation2022-01-05T18:21:56ZSébastien BlinCall re-invite - restart media only after successful ICE negotiationIf media transport uses ICE, and when a new media session is negotiated (incoming or outgoing re-invite) the current ICE session must be kept until the new ICE session is successfully negotiated, and the media is stopped and restarted us...If media transport uses ICE, and when a new media session is negotiated (incoming or outgoing re-invite) the current ICE session must be kept until the new ICE session is successfully negotiated, and the media is stopped and restarted using the new ICE session.
If the new session fails, the media transport must continue using the current ICE session.
# Scenario
+ In a call cut video
# Expected
+ the remote video should not be cut and retrieved a few secs after
# Current
During the negotiation remote video/audio is stopped and a glitch is seenMohamed ChibaniMohamed Chibanihttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/660Conference, various crash on peer exit2021-11-24T14:58:45ZSébastien BlinConference, various crash on peer exit# Scenario
+ Alice call Bob
+ Alice adds Carla to the conference
+ Bob stop
+ Crash
```
0x00007fffedfe7364 in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator std::basic_string_view<char, std::c...# Scenario
+ Alice call Bob
+ Alice adds Carla to the conference
+ Bob stop
+ Crash
```
0x00007fffedfe7364 in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator std::basic_string_view<char, std::char_traits<char> >() const () from /lib64/libstdc++.so.6
(gdb) bt
#0 0x00007fffedfe7364 in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator std::basic_string_view<char, std::char_traits<char> >() const () at /lib64/libstdc++.so.6
#1 0x00007fffec0f563c in std::less<void>::_S_cmp<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string_view<char, std::char_traits<char> > const&>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string_view<char, std::char_traits<char> > const&, std::integral_constant<bool, false>) (__t=<error reading variable: Cannot access memory at address 0x40>, __u="") at /usr/include/c++/10/bits/stl_function.h:601
#2 0x00007fffec0f569f in std::less<void>::operator()<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string_view<char, std::char_traits<char> > const&>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string_view<char, std::char_traits<char> > const&) const (this=0xc3c6c8, __t=<error reading variable: Cannot access memory at address 0x40>, __u="") at /usr/include/c++/10/bits/stl_function.h:586
#3 0x00007fffec0f0eeb in std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::_Identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::less<void>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::_M_lower_bound_tr<std::basic_string_view<char, std::char_traits<char> >, void>(std::basic_string_view<char, std::char_traits<char> > const&) const (this=0xc3c6c8, __k="") at /usr/include/c++/10/bits/stl_tree.h:1346
#4 0x00007fffec0eb35e in std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::_Identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::less<void>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::_M_find_tr<std::basic_string_view<char, std::char_traits<char> >, void>(std::basic_string_view<char, std::char_traits<char> > const&) const (this=0xc3c6c8, __k="") at /usr/include/c++/10/bits/stl_tree.h:1314
#5 0x00007fffec0e63b3 in std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<void>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::find<std::basic_string_view<char, std::char_traits<char> > >(std::basic_string_view<char, std::char_traits<char> > const&) const (this=0xc3c6c8, __x="") at /usr/include/c++/10/bits/stl_set.h:812
#6 0x00007fffec0d9002 in jami::Conference::isModerator(std::basic_string_view<char, std::char_traits<char> >) const (this=0xc3c4a0, uri="") at conference.cpp:946
#7 0x00007fffec0d327a in operator()() const (__closure=0x7ffe9e2422c0) at conference.cpp:100
#8 0x00007fffec0dc11a in operator()() (this=0x7ffe9e2422c0) at manager.h:1057
#9 0x00007fffec0de730 in std::__invoke_impl<void, jami::runOnMainThread<jami::Conference::Conference(bool)::<lambda(std::vector<jami::video::SourceInfo>&&)>::<lambda()> >::<lambda()>&>(std::__invoke_other, struct {...} &) (__f=...)
at /usr/include/c++/10/bits/invoke.h:60
#10 0x00007fffec0ddef4 in std::__invoke_r<void, jami::runOnMainThread<jami::Conference::Conference(bool)::<lambda(std::vector<jami::video::SourceInfo>&&)>::<lambda()> >::<lambda()>&>(struct {...} &) (__fn=...) at /usr/include/c++/10/bits/invoke.h:110
#11 0x00007fffec0dd337 in std::_Function_handler<void(), jami::runOnMainThread<jami::Conference::Conference(bool)::<lambda(std::vector<jami::video::SourceInfo>&&)>::<lambda()> >::<lambda()> >::_M_invoke(const std::_Any_data &) (__functor=...)
at /usr/include/c++/10/bits/std_function.h:291
#12 0x00007fffec1328d8 in std::function<void ()>::operator()() const (this=0x7ffe9e5d5e40) at /usr/include/c++/10/bits/std_function.h:622
#13 0x00007fffec205ce3 in jami::ScheduledExecutor::loop() (this=0xdc94a0) at scheduled_executor.cpp:137
#14 0x00007fffec2052a1 in operator()() const (__closure=0xe2e828) at scheduled_executor.cpp:32
#15 0x00007fffec207212 in std::__invoke_impl<void, jami::ScheduledExecutor::ScheduledExecutor()::<lambda()> >(std::__invoke_other, struct {...} &&) (__f=...) at /usr/include/c++/10/bits/invoke.h:60
#16 0x00007fffec2071c7 in std::__invoke<jami::ScheduledExecutor::ScheduledExecutor()::<lambda()> >(struct {...} &&) (__fn=...) at /usr/include/c++/10/bits/invoke.h:95
#17 0x00007fffec207174 in std::thread::_Invoker<std::tuple<jami::ScheduledExecutor::ScheduledExecutor()::<lambda()> > >::_M_invoke<0>(std::_Index_tuple<0>) (this=0xe2e828) at /usr/include/c++/10/thread:264
#18 0x00007fffec207148 in std::thread::_Invoker<std::tuple<jami::ScheduledExecutor::ScheduledExecutor()::<lambda()> > >::operator()(void) (this=0xe2e828) at /usr/include/c++/10/thread:271
#19 0x00007fffec20712c in std::thread::_State_impl<std::thread::_Invoker<std::tuple<jami::ScheduledExecutor::ScheduledExecutor()::<lambda()> > > >::_M_run(void) (this=0xe2e820) at /usr/include/c++/10/thread:215
#20 0x00007fffedf38444 in execute_native_thread_routine () at /lib64/libstdc++.so.6
#21 0x00007fffed9513f9 in start_thread () at /lib64/libpthread.so.0
#22 0x00007fffedc354c3 in clone () at /lib64/libc.so.6
```
```
Thread 72 "jami-qt" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7ffebaffd640 (LWP 3232921)]
std::_Rb_tree<jami::Observable<std::shared_ptr<DRing::MediaFrame> >*, std::pair<jami::Observable<std::shared_ptr<DRing::MediaFrame> >* const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::_Select1st<std::pair<jami::Observable<std::shared_ptr<DRing::MediaFrame> >* const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::less<jami::Observable<std::shared_ptr<DRing::MediaFrame> >*>, std::allocator<std::pair<jami::Observable<std::shared_ptr<DRing::MediaFrame> >* const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::_M_lower_bound (this=0x817f990, __x=0xc, __y=0x817f998, __k=@0x7ffebaff92f0: 0xd117170) at /usr/include/c++/10/bits/stl_tree.h:1937
1937 if (!_M_impl._M_key_compare(_S_key(__x), __k))
(gdb) bt
#0 std::_Rb_tree<jami::Observable<std::shared_ptr<DRing::MediaFrame> >*, std::pair<jami::Observable<std::shared_ptr<DRing::MediaFrame> >* const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::_Select1st<std::pair<jami::Observable<std::shared_ptr<DRing::MediaFrame> >* const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::less<jami::Observable<std::shared_ptr<DRing::MediaFrame> >*>, std::allocator<std::pair<jami::Observable<std::shared_ptr<DRing::MediaFrame> >* const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::_M_lower_bound(std::_Rb_tree_node<std::pair<jami::Observable<std::shared_ptr<DRing::MediaFrame> >* const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >*, std::_Rb_tree_node_base*, jami::Observable<std::shared_ptr<DRing::MediaFrame> >* const&) (this=0x817f990, __x=0xc, __y=0x817f998, __k=@0x7ffebaff92f0: 0xd117170) at /usr/include/c++/10/bits/stl_tree.h:1937
#1 0x00007fffec0ea361 in std::_Rb_tree<jami::Observable<std::shared_ptr<DRing::MediaFrame> >*, std::pair<jami::Observable<std::shared_ptr<DRing::MediaFrame> >* const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::_Select1st<std::pair<jami::Observable<std::shared_ptr<DRing::MediaFrame> >* const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::less<jami::Observable<std::shared_ptr<DRing::MediaFrame> >*>, std::allocator<std::pair<jami::Observable<std::shared_ptr<DRing::MediaFrame> >* const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::find(jami::Observable<std::shared_ptr<DRing::MediaFrame> >* const&) (this=0x817f990, __k=@0x7ffebaff92f0: 0xd117170)
at /usr/include/c++/10/bits/stl_tree.h:2555
#2 0x00007fffec0e6513 in std::map<jami::Observable<std::shared_ptr<DRing::MediaFrame> >*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<jami::Observable<std::shared_ptr<DRing::MediaFrame> >*>, std::allocator<std::pair<jami::Observable<std::shared_ptr<DRing::MediaFrame> >* const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::find(jami::Observable<std::shared_ptr<DRing::MediaFrame> >* const&) (this=0x817f990, __x=@0x7ffebaff92f0: 0xd117170)
at /usr/include/c++/10/bits/stl_map.h:1170
#3 0x00007fffec0d9af9 in jami::Conference::detachVideo(jami::Observable<std::shared_ptr<DRing::MediaFrame> >*) (this=0x817f860, frame=0xd117170) at conference.cpp:610
#4 0x00007fffec324a1a in jami::video::VideoRtpSession::setupConferenceVideoPipeline(jami::Conference&) (this=0xd120760, conference=...) at ./media/video/video_rtp_session.cpp:352
#5 0x00007fffec324795 in jami::video::VideoRtpSession::setupVideoPipeline() (this=0xd120760) at ./media/video/video_rtp_session.cpp:324
#6 0x00007fffec3242dc in jami::video::VideoRtpSession::start(std::unique_ptr<jami::IceSocket, std::default_delete<jami::IceSocket> >, std::unique_ptr<jami::IceSocket, std::default_delete<jami::IceSocket> >)
(this=0xd120760, rtp_sock=std::unique_ptr<jami::IceSocket> = {...}, rtcp_sock=std::unique_ptr<jami::IceSocket> = {...}) at ./media/video/video_rtp_session.cpp:271
#7 0x00007fffec37350e in jami::SIPCall::startAllMedia() (this=0xd117280) at ./sip/sipcall.cpp:2037
#8 0x00007fffec3756b4 in jami::SIPCall::onIceNegoSucceed() (this=0xd117280) at ./sip/sipcall.cpp:2472
#9 0x00007fffec378a1e in operator()() const (__closure=0x7ffb880099c0) at ./sip/sipcall.cpp:3129
#10 0x00007fffec37c878 in operator()() (this=0x7ffb880099c0) at ./manager.h:1057
#11 0x00007fffec3825e2 in std::__invoke_impl<void, jami::runOnMainThread<jami::SIPCall::initIceMediaTransport(bool, std::optional<jami::IceTransportOptions>)::<lambda(bool)>::<lambda()> >::<lambda()>&>(std::__invoke_other, struct {...} &) (__f=...)
at /usr/include/c++/10/bits/invoke.h:60
#12 0x00007fffec3813d2 in std::__invoke_r<void, jami::runOnMainThread<jami::SIPCall::initIceMediaTransport(bool, std::optional<jami::IceTransportOptions>)::<lambda(bool)>::<lambda()> >::<lambda()>&>(struct {...} &) (__fn=...) at /usr/include/c++/10/bits/invoke.h:110
#13 0x00007fffec37f7c3 in std::_Function_handler<void(), jami::runOnMainThread<jami::SIPCall::initIceMediaTransport(bool, std::optional<jami::IceTransportOptions>)::<lambda(bool)>::<lambda()> >::<lambda()> >::_M_invoke(const std::_Any_data &) (__functor=...)
at /usr/include/c++/10/bits/std_function.h:291
#14 0x00007fffec134480 in std::function<void ()>::operator()() const (this=0x7ffb880098f0) at /usr/include/c++/10/bits/std_function.h:622
#15 0x00007fffec20789d in jami::ScheduledExecutor::loop() (this=0xdcc320) at scheduled_executor.cpp:137
#16 0x00007fffec206e5b in operator()() const (__closure=0xdfcab8) at scheduled_executor.cpp:32
#17 0x00007fffec208dcc in std::__invoke_impl<void, jami::ScheduledExecutor::ScheduledExecutor()::<lambda()> >(std::__invoke_other, struct {...} &&) (__f=...) at /usr/include/c++/10/bits/invoke.h:60
#18 0x00007fffec208d81 in std::__invoke<jami::ScheduledExecutor::ScheduledExecutor()::<lambda()> >(struct {...} &&) (__fn=...) at /usr/include/c++/10/bits/invoke.h:95
#19 0x00007fffec208d2e in std::thread::_Invoker<std::tuple<jami::ScheduledExecutor::ScheduledExecutor()::<lambda()> > >::_M_invoke<0>(std::_Index_tuple<0>) (this=0xdfcab8) at /usr/include/c++/10/thread:264
#20 0x00007fffec208d02 in std::thread::_Invoker<std::tuple<jami::ScheduledExecutor::ScheduledExecutor()::<lambda()> > >::operator()(void) (this=0xdfcab8) at /usr/include/c++/10/thread:271
#21 0x00007fffec208ce6 in std::thread::_State_impl<std::thread::_Invoker<std::tuple<jami::ScheduledExecutor::ScheduledExecutor()::<lambda()> > > >::_M_run(void) (this=0xdfcab0) at /usr/include/c++/10/thread:215
#22 0x00007fffedf38444 in execute_native_thread_routine () at /lib64/libstdc++.so.6
#23 0x00007fffed9513f9 in start_thread () at /lib64/libpthread.so.0
#24 0x00007fffedc354c3 in clone () at /lib64/libc.so.6
```
```
0x00007fffedf23e53 in std::_Rb_tree_increment(std::_Rb_tree_node_base const*) () from /lib64/libstdc++.so.6
(gdb) bt
#0 0x00007fffedf23e53 in std::_Rb_tree_increment(std::_Rb_tree_node_base const*) () at /lib64/libstdc++.so.6
#1 0x00007fffec0e6993 in std::_Rb_tree_const_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::operator++() (this=0x7ffecaff92d8) at /usr/include/c++/10/bits/stl_tree.h:368
#2 0x00007fffec0dd8e7 in jami::Conference::isHost(std::basic_string_view<char, std::char_traits<char> >) const (this=0x9448cf0, uri="host") at conference.cpp:1158
#3 0x00007fffec0dc040 in jami::Conference::isHandRaised(std::basic_string_view<char, std::char_traits<char> >) const (this=0x9448cf0, uri="host") at conference.cpp:948
#4 0x00007fffec0d634d in operator()() const (__closure=0x7ffafc4be450) at conference.cpp:108
#5 0x00007fffec0dee4c in operator()() (this=0x7ffafc4be450) at manager.h:1057
#6 0x00007fffec0e045e in std::__invoke_impl<void, jami::runOnMainThread<jami::Conference::Conference(bool)::<lambda(std::vector<jami::video::SourceInfo>&&)>::<lambda()> >::<lambda()>&>(std::__invoke_other, struct {...} &) (__f=...)
at /usr/include/c++/10/bits/invoke.h:60
#7 0x00007fffec0e005c in std::__invoke_r<void, jami::runOnMainThread<jami::Conference::Conference(bool)::<lambda(std::vector<jami::video::SourceInfo>&&)>::<lambda()> >::<lambda()>&>(struct {...} &) (__fn=...) at /usr/include/c++/10/bits/invoke.h:110
#8 0x00007fffec0dfa21 in std::_Function_handler<void(), jami::runOnMainThread<jami::Conference::Conference(bool)::<lambda(std::vector<jami::video::SourceInfo>&&)>::<lambda()> >::<lambda()> >::_M_invoke(const std::_Any_data &) (__functor=...)
at /usr/include/c++/10/bits/std_function.h:291
#9 0x00007fffec134480 in std::function<void ()>::operator()() const (this=0x7ffb241e8d40) at /usr/include/c++/10/bits/std_function.h:622
#10 0x00007fffec20789d in jami::ScheduledExecutor::loop() (this=0xdcb3a0) at scheduled_executor.cpp:137
#11 0x00007fffec206e5b in operator()() const (__closure=0xde11c8) at scheduled_executor.cpp:32
#12 0x00007fffec208dcc in std::__invoke_impl<void, jami::ScheduledExecutor::ScheduledExecutor()::<lambda()> >(std::__invoke_other, struct {...} &&) (__f=...) at /usr/include/c++/10/bits/invoke.h:60
#13 0x00007fffec208d81 in std::__invoke<jami::ScheduledExecutor::ScheduledExecutor()::<lambda()> >(struct {...} &&) (__fn=...) at /usr/include/c++/10/bits/invoke.h:95
#14 0x00007fffec208d2e in std::thread::_Invoker<std::tuple<jami::ScheduledExecutor::ScheduledExecutor()::<lambda()> > >::_M_invoke<0>(std::_Index_tuple<0>) (this=0xde11c8) at /usr/include/c++/10/thread:264
#15 0x00007fffec208d02 in std::thread::_Invoker<std::tuple<jami::ScheduledExecutor::ScheduledExecutor()::<lambda()> > >::operator()(void) (this=0xde11c8) at /usr/include/c++/10/thread:271
#16 0x00007fffec208ce6 in std::thread::_State_impl<std::thread::_Invoker<std::tuple<jami::ScheduledExecutor::ScheduledExecutor()::<lambda()> > > >::_M_run(void) (this=0xde11c0) at /usr/include/c++/10/thread:215
#17 0x00007fffedf38444 in execute_native_thread_routine () at /lib64/libstdc++.so.6
#18 0x00007fffed9513f9 in start_thread () at /lib64/libpthread.so.0
#19 0x00007fffedc354c3 in clone () at /lib64/libc.so.6
(gdb)
```Sébastien BlinSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/658Lag with decodingAccelerated: true2021-12-23T21:54:34ZSébastien BlinLag with decodingAccelerated: trueIn fact I see 3 bugs:
1. In `SinkClient::update`
doTransfer is True even if video-split is not used yet (cf Conference::sendConferenceInfos(), no delay if createSinks is commented). This must be false if sink is not used. This means th...In fact I see 3 bugs:
1. In `SinkClient::update`
doTransfer is True even if video-split is not used yet (cf Conference::sendConferenceInfos(), no delay if createSinks is commented). This must be false if sink is not used. This means that registerSinkClient is done in LRC even if sink is not used
2. HAVE_SHM is true if libwrap is true in LRC. We should change the configure to have enable-shm with dbus and not with libwrap.
3. `HardwareAccel::transferToMainMemory` is called for every participant, for every sink client. It should be done only once and then cropped by the sink clients.Sébastien BlinSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/638Conference - Handle media change request (for host and remote participants)2022-01-05T18:21:51ZSébastien BlinConference - Handle media change request (for host and remote participants)# Scenario 0 - Bob account is in RDV mode
+ Alice calls rdv-bob
+ Carla calls rdv-bob
- Expected result:\
Bob is in detached mode, and local audio/video is in muted state
# Scenario 1 - Bob account is in RDV mode
+ Alice calls rdv-bob ...# Scenario 0 - Bob account is in RDV mode
+ Alice calls rdv-bob
+ Carla calls rdv-bob
- Expected result:\
Bob is in detached mode, and local audio/video is in muted state
# Scenario 1 - Bob account is in RDV mode
+ Alice calls rdv-bob in audio only
+ Alice upgrades to video
- Expected result:\
Alice should receives her video along with the other videos (from participants)
# Scenario 2 - Bob account is in RDV mode
+ Alice and Carl call rdv-bob
+ Bob joins the conference
- Expected result:\
Bob local audio should be added\
Bob local video (camera) should be added (and un-muted) if enabled in the account
# Scenario 3 - Bob account is in RDV mode
+ Alice and Carl call rdv-bob in audio only
+ Bob joins the conference
- Expected result:\
Bob local audio should be added\
Bob local video (camera) should be added (and un-muted) if enabled in the account
Alice and Carla should not receive video from conference unless they join with their video
# Scenario 4 - Bob account is in RDV mode
+ Alice call rdv-bob
+ Carla call rdv-bob in audio only
- Expected result:\
Carla should not receive video from conference unless she join with her video
# Scenario 5
+ Bob is on a call with Alice
+ Carla calls Bob (or the opposite). Alice's is put on-hold.
+ Bob joins Alice's call to create a conference
- Expected result:\
Bob local audio should be un-muted unless both calls where muted\
Bob local video should be un-muted unless both calls where muted. Does not apply if the video is disabled.Mohamed ChibaniMohamed Chibani