From bb854e30a2f4af8088fa68adae6c1e92c1d2f226 Mon Sep 17 00:00:00 2001 From: Simon Morlat <simon.morlat@linphone.org> Date: Thu, 26 Oct 2023 12:18:44 +0200 Subject: [PATCH] Fix crash in linphone-daemon when reporting call statistics --- coreapi/private_functions.h | 4 ---- src/c-wrapper/api/c-call-params.cpp | 16 ---------------- src/conference/params/media-session-params-p.h | 16 ++++++++-------- src/conference/session/audio-stream.cpp | 3 ++- src/conference/session/rtt-stream.cpp | 3 ++- src/conference/session/video-stream.cpp | 3 ++- 6 files changed, 14 insertions(+), 31 deletions(-) diff --git a/coreapi/private_functions.h b/coreapi/private_functions.h index d2feab36e9..01ff200a32 100644 --- a/coreapi/private_functions.h +++ b/coreapi/private_functions.h @@ -143,10 +143,6 @@ void linphone_call_params_set_sent_video_definition(LinphoneCallParams *params, void linphone_call_params_set_received_video_definition(LinphoneCallParams *params, LinphoneVideoDefinition *vdef); void linphone_call_params_set_sent_fps(LinphoneCallParams *params, float value); void linphone_call_params_set_received_fps(LinphoneCallParams *params, float value); -void linphone_call_params_set_used_audio_codec(LinphoneCallParams *params, OrtpPayloadType *codec); -void linphone_call_params_set_used_video_codec(LinphoneCallParams *params, OrtpPayloadType *codec); -void linphone_call_params_set_used_fec_codec(LinphoneCallParams *params, OrtpPayloadType *codec); -void linphone_call_params_set_used_text_codec(LinphoneCallParams *params, OrtpPayloadType *codec); bool_t linphone_call_params_get_no_user_consent(const LinphoneCallParams *params); time_t linphone_call_params_get_start_time(const LinphoneCallParams *params); time_t linphone_call_params_get_end_time(const LinphoneCallParams *params); diff --git a/src/c-wrapper/api/c-call-params.cpp b/src/c-wrapper/api/c-call-params.cpp index 2fa745243d..e62e5a4bd3 100644 --- a/src/c-wrapper/api/c-call-params.cpp +++ b/src/c-wrapper/api/c-call-params.cpp @@ -356,22 +356,6 @@ const LinphonePayloadType *linphone_call_params_get_used_text_payload_type(const return bellesip::toC(L_GET_CPP_PTR_FROM_C_OBJECT(params)->getUsedRealtimeTextPayloadType()); } -void linphone_call_params_set_used_audio_codec(LinphoneCallParams *params, OrtpPayloadType *codec) { - L_GET_PRIVATE_FROM_C_OBJECT(params)->setUsedAudioCodec(codec); -} - -void linphone_call_params_set_used_video_codec(LinphoneCallParams *params, OrtpPayloadType *codec) { - L_GET_PRIVATE_FROM_C_OBJECT(params)->setUsedVideoCodec(codec); -} - -void linphone_call_params_set_used_fec_codec(LinphoneCallParams *params, OrtpPayloadType *codec) { - L_GET_PRIVATE_FROM_C_OBJECT(params)->setUsedFecCodec(codec); -} - -void linphone_call_params_set_used_text_codec(LinphoneCallParams *params, OrtpPayloadType *codec) { - L_GET_PRIVATE_FROM_C_OBJECT(params)->setUsedRealtimeTextCodec(codec); -} - bool_t linphone_call_params_low_bandwidth_enabled(const LinphoneCallParams *params) { return L_GET_CPP_PTR_FROM_C_OBJECT(params)->lowBandwidthEnabled(); } diff --git a/src/conference/params/media-session-params-p.h b/src/conference/params/media-session-params-p.h index f413ce40a6..9d7cc7a33a 100644 --- a/src/conference/params/media-session-params-p.h +++ b/src/conference/params/media-session-params-p.h @@ -97,17 +97,17 @@ public: sentFps = value; } void setSentVideoDefinition(LinphoneVideoDefinition *value); - void setUsedAudioCodec(OrtpPayloadType *pt) { - usedAudioCodec = pt ? PayloadType::create(nullptr, pt) : nullptr; + void setUsedAudioCodec(std::shared_ptr<PayloadType> pt) { + usedAudioCodec = pt; } - void setUsedVideoCodec(OrtpPayloadType *pt) { - usedVideoCodec = pt ? PayloadType::create(nullptr, pt) : nullptr; + void setUsedVideoCodec(std::shared_ptr<PayloadType> pt) { + usedVideoCodec = pt; } - void setUsedRealtimeTextCodec(OrtpPayloadType *pt) { - usedRealtimeTextCodec = pt ? PayloadType::create(nullptr, pt) : nullptr; + void setUsedRealtimeTextCodec(std::shared_ptr<PayloadType> pt) { + usedRealtimeTextCodec = pt; } - void setUsedFecCodec(OrtpPayloadType *pt) { - usedFecCodec = pt ? PayloadType::create(nullptr, pt) : nullptr; + void setUsedFecCodec(std::shared_ptr<PayloadType> pt) { + usedFecCodec = pt; } SalCustomSdpAttribute *getCustomSdpAttributes() const; void setCustomSdpAttributes(const SalCustomSdpAttribute *csa); diff --git a/src/conference/session/audio-stream.cpp b/src/conference/session/audio-stream.cpp index ad5003f6d1..cfa7384054 100644 --- a/src/conference/session/audio-stream.cpp +++ b/src/conference/session/audio-stream.cpp @@ -413,8 +413,9 @@ void MS2AudioStream::render(const OfferAnswerContext ¶ms, CallSession::State bool ok = true; if (isMain()) { + OrtpPayloadType *pt = rtp_profile_get_payload(audioProfile, usedPt); getMediaSessionPrivate().getCurrentParams()->getPrivate()->setUsedAudioCodec( - rtp_profile_get_payload(audioProfile, usedPt)); + pt ? PayloadType::create(getCore().getSharedFromThis(), pt) : nullptr); } if (stream.getDirection() == SalStreamSendOnly) media_stream_set_direction(&mStream->ms, MediaStreamSendOnly); diff --git a/src/conference/session/rtt-stream.cpp b/src/conference/session/rtt-stream.cpp index e2733974e6..5c9274284e 100644 --- a/src/conference/session/rtt-stream.cpp +++ b/src/conference/session/rtt-stream.cpp @@ -94,8 +94,9 @@ void MS2RTTStream::render(const OfferAnswerContext ¶ms, CallSession::State t stop(); return; } + OrtpPayloadType *pt = rtp_profile_get_payload(textProfile, usedPt); getMediaSessionPrivate().getCurrentParams()->getPrivate()->setUsedRealtimeTextCodec( - rtp_profile_get_payload(textProfile, usedPt)); + pt ? PayloadType::create(getCore().getSharedFromThis(), pt) : nullptr); getMediaSessionPrivate().getCurrentParams()->enableRealtimeText(true); unsigned int interval = getMediaSessionPrivate().getParams()->realtimeTextKeepaliveInterval(); diff --git a/src/conference/session/video-stream.cpp b/src/conference/session/video-stream.cpp index 92b6635e51..27e9d78ade 100644 --- a/src/conference/session/video-stream.cpp +++ b/src/conference/session/video-stream.cpp @@ -378,8 +378,9 @@ void MS2VideoStream::render(const OfferAnswerContext &ctx, CallSession::State ta video_stream_set_display_callback(mStream, sVideoStreamDisplayCb, this); video_stream_set_camera_not_working_callback(mStream, sCameraNotWorkingCb, this); if (isMain()) { + OrtpPayloadType *pt = rtp_profile_get_payload(videoProfile, usedPt); getMediaSessionPrivate().getCurrentParams()->getPrivate()->setUsedVideoCodec( - rtp_profile_get_payload(videoProfile, usedPt)); + pt ? PayloadType::create(getCore().getSharedFromThis(), pt) : nullptr); } if (getCCore()->video_conf.preview_vsize.width != 0) -- GitLab