[packages/mediastreamer-plugin-mswebrtc] - added cmake,b64-refactor patches from git; release 2 (mediastreamer 5.3.x)
qboosh
qboosh at pld-linux.org
Sun Apr 7 16:03:38 CEST 2024
commit 41e110f6da51acf50f60cd2edb39e98b73152d5a
Author: Jakub Bogusz <qboosh at pld-linux.org>
Date: Sun Apr 7 15:23:25 2024 +0200
- added cmake,b64-refactor patches from git; release 2 (mediastreamer 5.3.x)
mediastreamer-plugin-mswebrtc.spec | 6 +-
mswebrtc-b64-refactor.patch | 949 +++++++++++++++++++++++++++++++++++++
mswebrtc-cmake.patch | 626 ++++++++++++++++++++++++
3 files changed, 1580 insertions(+), 1 deletion(-)
---
diff --git a/mediastreamer-plugin-mswebrtc.spec b/mediastreamer-plugin-mswebrtc.spec
index 5e0281d..73b1fe8 100644
--- a/mediastreamer-plugin-mswebrtc.spec
+++ b/mediastreamer-plugin-mswebrtc.spec
@@ -3,7 +3,7 @@ Summary: WebRTC plugin for mediastreamer
Summary(pl.UTF-8): Wtyczka WebRTC dla mediastreamera
Name: mediastreamer-plugin-mswebrtc
Version: 1.1.2
-Release: 1
+Release: 2
License: GPL v2
Group: Libraries
#Source0Download: https://gitlab.linphone.org/BC/public/mswebrtc/-/tags
@@ -15,6 +15,8 @@ Source1: https://gitlab.linphone.org/BC/public/external/webrtc/-/archive/%{webrt
Patch0: %{name}-make.patch
Patch1: %{name}-link.patch
Patch2: mswebrtc-sse2.patch
+Patch3: mswebrtc-cmake.patch
+Patch4: mswebrtc-b64-refactor.patch
URL: https://gitlab.linphone.org/BC/public/mswebrtc
BuildRequires: cmake >= 3.1
BuildRequires: libstdc++-devel >= 6:4.7
@@ -38,6 +40,8 @@ iSAC, AECM...).
%patch0 -p1
%patch1 -p1
%patch2 -p1
+%patch3 -p1
+%patch4 -p1
%build
# autotools suite is more outdated, doesn't have VAD support
diff --git a/mswebrtc-b64-refactor.patch b/mswebrtc-b64-refactor.patch
new file mode 100644
index 0000000..af4a1e1
--- /dev/null
+++ b/mswebrtc-b64-refactor.patch
@@ -0,0 +1,949 @@
+From 17e72f00831a36da387ceafe7f3076ffa8f66aba Mon Sep 17 00:00:00 2001
+From: Clemence Him <clemence.him at belledonne-communications.com>
+Date: Fri, 22 Sep 2023 14:28:02 +0200
+Subject: [PATCH] Base64 functions refactoring
+
+---
+ aec.c | 781 +++++++++++++++++++++++++++++-----------------------------
+ 1 file changed, 394 insertions(+), 387 deletions(-)
+
+diff --git a/aec.c b/aec.c
+index 271f370..995f655 100644
+--- a/aec.c
++++ b/aec.c
+@@ -24,19 +24,18 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ #include "mediastreamer2/msfilter.h"
+ #include "mediastreamer2/msticker.h"
+ #ifdef BUILD_AEC
+-#include "echo_cancellation.h"
+ #include "aec_splitting_filter.h"
++#include "echo_cancellation.h"
+ #endif
+ #ifdef BUILD_AECM
+ #include "echo_control_mobile.h"
+ #endif
+-#include "ortp/b64.h"
+
+ #ifdef _WIN32
+ #include <malloc.h> /* for alloca */
+ #endif
+
+-//#define EC_DUMP 1
++// #define EC_DUMP 1
+ #ifdef ANDROID
+ #define EC_DUMP_PREFIX "/sdcard"
+ #else
+@@ -48,466 +47,485 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ static const float smooth_factor = 0.05f;
+ static const int framesize = 80;
+
+-
+ typedef enum _WebRTCAECType {
+- WebRTCAECTypeNormal,
+- WebRTCAECTypeMobile
++ WebRTCAECTypeNormal,
++ WebRTCAECTypeMobile
+ } WebRTCAECType;
+
+ typedef struct WebRTCAECState {
+- void *aecInst;
+- MSBufferizer delayed_ref;
+- MSFlowControlledBufferizer ref;
+- MSBufferizer echo;
+- int framesize;
+- int samplerate;
+- int delay_ms;
+- int nominal_ref_samples;
+- char *state_str;
++ void *aecInst;
++ MSBufferizer delayed_ref;
++ MSFlowControlledBufferizer ref;
++ MSBufferizer echo;
++ int framesize;
++ int samplerate;
++ int delay_ms;
++ int nominal_ref_samples;
++ char *state_str;
+ #ifdef EC_DUMP
+- FILE *echofile;
+- FILE *reffile;
+- FILE *cleanfile;
++ FILE *echofile;
++ FILE *reffile;
++ FILE *cleanfile;
+ #endif
+- bool_t echostarted;
+- bool_t bypass_mode;
+- bool_t using_zeroes;
+- WebRTCAECType aec_type;
++ bool_t echostarted;
++ bool_t bypass_mode;
++ bool_t using_zeroes;
++ WebRTCAECType aec_type;
+ #ifdef BUILD_AEC
+- MSWebRtcAecSplittingFilter *splitting_filter;
++ MSWebRtcAecSplittingFilter *splitting_filter;
+ #endif
+ } WebRTCAECState;
+
+ static void webrtc_aecgeneric_init(MSFilter *f, WebRTCAECType aec_type) {
+- WebRTCAECState *s = (WebRTCAECState *) ms_new0(WebRTCAECState, 1);
+-
+- s->samplerate = 8000;
+- ms_bufferizer_init(&s->delayed_ref);
+- ms_bufferizer_init(&s->echo);
+- ms_flow_controlled_bufferizer_init(&s->ref, f, s->samplerate, 1);
+- s->delay_ms = 0;
+- s->aecInst = NULL;
+- s->framesize = framesize;
+- s->state_str = NULL;
+- s->using_zeroes = FALSE;
+- s->echostarted = FALSE;
+- s->bypass_mode = FALSE;
+- s->aec_type = aec_type;
++ WebRTCAECState *s = (WebRTCAECState *)ms_new0(WebRTCAECState, 1);
++
++ s->samplerate = 8000;
++ ms_bufferizer_init(&s->delayed_ref);
++ ms_bufferizer_init(&s->echo);
++ ms_flow_controlled_bufferizer_init(&s->ref, f, s->samplerate, 1);
++ s->delay_ms = 0;
++ s->aecInst = NULL;
++ s->framesize = framesize;
++ s->state_str = NULL;
++ s->using_zeroes = FALSE;
++ s->echostarted = FALSE;
++ s->bypass_mode = FALSE;
++ s->aec_type = aec_type;
+
+ #ifdef EC_DUMP
+- {
+- char *fname = ms_strdup_printf("%s/mswebrtcaec-%p-echo.raw", EC_DUMP_PREFIX, f);
+- s->echofile = fopen(fname, "w");
+- ms_free(fname);
+- fname = ms_strdup_printf("%s/mswebrtcaec-%p-ref.raw", EC_DUMP_PREFIX, f);
+- s->reffile = fopen(fname, "w");
+- ms_free(fname);
+- fname = ms_strdup_printf("%s/mswebrtcaec-%p-clean.raw", EC_DUMP_PREFIX, f);
+- s->cleanfile = fopen(fname, "w");
+- ms_free(fname);
+- }
++ {
++ char *fname =
++ ms_strdup_printf("%s/mswebrtcaec-%p-echo.raw", EC_DUMP_PREFIX, f);
++ s->echofile = fopen(fname, "w");
++ ms_free(fname);
++ fname = ms_strdup_printf("%s/mswebrtcaec-%p-ref.raw", EC_DUMP_PREFIX, f);
++ s->reffile = fopen(fname, "w");
++ ms_free(fname);
++ fname = ms_strdup_printf("%s/mswebrtcaec-%p-clean.raw", EC_DUMP_PREFIX, f);
++ s->cleanfile = fopen(fname, "w");
++ ms_free(fname);
++ }
+ #endif
+
+- f->data = s;
++ f->data = s;
+ }
+
+ #ifdef BUILD_AEC
+ static void webrtc_aec_init(MSFilter *f) {
+- webrtc_aecgeneric_init(f, WebRTCAECTypeNormal);
++ webrtc_aecgeneric_init(f, WebRTCAECTypeNormal);
+ }
+ #endif
+
+ #ifdef BUILD_AECM
+ static void webrtc_aecm_init(MSFilter *f) {
+- webrtc_aecgeneric_init(f, WebRTCAECTypeMobile);
++ webrtc_aecgeneric_init(f, WebRTCAECTypeMobile);
+ }
+ #endif
+
+ static void webrtc_aec_uninit(MSFilter *f) {
+- WebRTCAECState *s = (WebRTCAECState *) f->data;
+- if (s->state_str) ms_free(s->state_str);
+- ms_bufferizer_uninit(&s->delayed_ref);
++ WebRTCAECState *s = (WebRTCAECState *)f->data;
++ if (s->state_str)
++ ms_free(s->state_str);
++ ms_bufferizer_uninit(&s->delayed_ref);
+ #ifdef EC_DUMP
+- if (s->echofile)
+- fclose(s->echofile);
+- if (s->reffile)
+- fclose(s->reffile);
++ if (s->echofile)
++ fclose(s->echofile);
++ if (s->reffile)
++ fclose(s->reffile);
+ #endif
+- ms_free(s);
++ ms_free(s);
+ }
+
+ static void configure_flow_controlled_bufferizer(WebRTCAECState *s) {
+- ms_flow_controlled_bufferizer_set_samplerate(&s->ref, s->samplerate);
+- ms_flow_controlled_bufferizer_set_max_size_ms(&s->ref, s->delay_ms);
+- ms_flow_controlled_bufferizer_set_granularity_ms(&s->ref, (s->framesize * 1000) / s->samplerate);
++ ms_flow_controlled_bufferizer_set_samplerate(&s->ref, s->samplerate);
++ ms_flow_controlled_bufferizer_set_max_size_ms(&s->ref, s->delay_ms);
++ ms_flow_controlled_bufferizer_set_granularity_ms(
++ &s->ref, (s->framesize * 1000) / s->samplerate);
+ }
+
+ static void webrtc_aec_preprocess(MSFilter *f) {
+- WebRTCAECState *s = (WebRTCAECState *) f->data;
++ WebRTCAECState *s = (WebRTCAECState *)f->data;
+ #ifdef BUILD_AEC
+- AecConfig aec_config;
++ AecConfig aec_config;
+ #endif
+ #ifdef BUILD_AECM
+- AecmConfig aecm_config;
+- int error_code;
++ AecmConfig aecm_config;
++ int error_code;
+ #endif
+- int delay_samples = 0;
+- mblk_t *m;
++ int delay_samples = 0;
++ mblk_t *m;
+
+- s->echostarted = FALSE;
+- delay_samples = s->delay_ms * s->samplerate / 1000;
+- s->framesize=(framesize*s->samplerate)/8000;
+- ms_message("Initializing WebRTC echo canceler with framesize=%i, delay_ms=%i, delay_samples=%i", s->framesize, s->delay_ms, delay_samples);
+- configure_flow_controlled_bufferizer(s);
++ s->echostarted = FALSE;
++ delay_samples = s->delay_ms * s->samplerate / 1000;
++ s->framesize = (framesize * s->samplerate) / 8000;
++ ms_message("Initializing WebRTC echo canceler with framesize=%i, "
++ "delay_ms=%i, delay_samples=%i",
++ s->framesize, s->delay_ms, delay_samples);
++ configure_flow_controlled_bufferizer(s);
+
+ #ifdef BUILD_AEC
+- if (s->aec_type == WebRTCAECTypeNormal) {
+- if ((s->aecInst = WebRtcAec_Create()) == NULL) {
+- s->bypass_mode = TRUE;
+- ms_error("WebRtcAec_Create(): error, entering bypass mode");
+- return;
+- }
+- if ((WebRtcAec_Init(s->aecInst, MIN(48000, s->samplerate), s->samplerate)) < 0) {
+- ms_error("WebRtcAec_Init(): WebRTC echo canceller does not support %d samplerate", s->samplerate);
+- s->bypass_mode = TRUE;
+- ms_error("Entering bypass mode");
+- return;
+- }
+- aec_config.nlpMode = kAecNlpAggressive;
+- aec_config.skewMode = kAecFalse;
+- aec_config.metricsMode = kAecFalse;
+- aec_config.delay_logging = kAecFalse;
+- if (WebRtcAec_set_config(s->aecInst, aec_config) != 0) {
+- ms_error("WebRtcAec_set_config(): failed.");
+- }
+- }
++ if (s->aec_type == WebRTCAECTypeNormal) {
++ if ((s->aecInst = WebRtcAec_Create()) == NULL) {
++ s->bypass_mode = TRUE;
++ ms_error("WebRtcAec_Create(): error, entering bypass mode");
++ return;
++ }
++ if ((WebRtcAec_Init(s->aecInst, MIN(48000, s->samplerate), s->samplerate)) <
++ 0) {
++ ms_error("WebRtcAec_Init(): WebRTC echo canceller does not support %d "
++ "samplerate",
++ s->samplerate);
++ s->bypass_mode = TRUE;
++ ms_error("Entering bypass mode");
++ return;
++ }
++ aec_config.nlpMode = kAecNlpAggressive;
++ aec_config.skewMode = kAecFalse;
++ aec_config.metricsMode = kAecFalse;
++ aec_config.delay_logging = kAecFalse;
++ if (WebRtcAec_set_config(s->aecInst, aec_config) != 0) {
++ ms_error("WebRtcAec_set_config(): failed.");
++ }
++ }
+ #endif
+ #ifdef BUILD_AECM
+- if (s->aec_type == WebRTCAECTypeMobile) {
+- if ((s->aecInst = WebRtcAecm_Create()) == NULL) {
+- s->bypass_mode = TRUE;
+- ms_error("WebRtcAecm_Create(): error, entering bypass mode");
+- return;
+- }
+- if ((error_code = WebRtcAecm_Init(s->aecInst, s->samplerate)) < 0) {
+- if (error_code == AECM_BAD_PARAMETER_ERROR) {
+- ms_error("WebRtcAecm_Init(): WebRTC echo canceller does not support %d samplerate", s->samplerate);
+- }
+- s->bypass_mode = TRUE;
+- ms_error("Entering bypass mode");
+- return;
+- }
+- aecm_config.cngMode = TRUE;
+- aecm_config.echoMode = 3;
+- if (WebRtcAecm_set_config(s->aecInst, aecm_config)!=0){
+- ms_error("WebRtcAecm_set_config(): failed.");
+- }
+- }
++ if (s->aec_type == WebRTCAECTypeMobile) {
++ if ((s->aecInst = WebRtcAecm_Create()) == NULL) {
++ s->bypass_mode = TRUE;
++ ms_error("WebRtcAecm_Create(): error, entering bypass mode");
++ return;
++ }
++ if ((error_code = WebRtcAecm_Init(s->aecInst, s->samplerate)) < 0) {
++ if (error_code == AECM_BAD_PARAMETER_ERROR) {
++ ms_error("WebRtcAecm_Init(): WebRTC echo canceller does not support %d "
++ "samplerate",
++ s->samplerate);
++ }
++ s->bypass_mode = TRUE;
++ ms_error("Entering bypass mode");
++ return;
++ }
++ aecm_config.cngMode = TRUE;
++ aecm_config.echoMode = 3;
++ if (WebRtcAecm_set_config(s->aecInst, aecm_config) != 0) {
++ ms_error("WebRtcAecm_set_config(): failed.");
++ }
++ }
+ #endif
+
+- /* fill with zeroes for the time of the delay*/
+- m = allocb(delay_samples * 2, 0);
+- m->b_wptr += delay_samples * 2;
+- ms_bufferizer_put(&s->delayed_ref, m);
+- s->nominal_ref_samples = delay_samples;
++ /* fill with zeroes for the time of the delay*/
++ m = allocb(delay_samples * 2, 0);
++ m->b_wptr += delay_samples * 2;
++ ms_bufferizer_put(&s->delayed_ref, m);
++ s->nominal_ref_samples = delay_samples;
+ }
+
+ /* inputs[0]= reference signal from far end (sent to soundcard)
+ * inputs[1]= near speech & echo signal (read from soundcard)
+ * outputs[0]= is a copy of inputs[0] to be sent to soundcard
+ * outputs[1]= near end speech, echo removed - towards far end
+-*/
++ */
+ static void webrtc_aec_process(MSFilter *f) {
+- WebRTCAECState *s = (WebRTCAECState *) f->data;
+- int nbytes = s->framesize * sizeof(int16_t);
+- mblk_t *refm;
+- int16_t *ref, *echo;
+- int nbands = 1;
+- int bandsize = s->framesize;
+-
+- if (s->bypass_mode) {
+- while ((refm = ms_queue_get(f->inputs[0])) != NULL) {
+- ms_queue_put(f->outputs[0], refm);
+- }
+- while ((refm = ms_queue_get(f->inputs[1])) != NULL) {
+- ms_queue_put(f->outputs[1], refm);
+- }
+- return;
+- }
+-
+- if (f->inputs[0] != NULL) {
+- if (s->echostarted) {
+- while ((refm = ms_queue_get(f->inputs[0])) != NULL) {
+- mblk_t *cp=dupmsg(refm);
+- ms_bufferizer_put(&s->delayed_ref,cp);
+- ms_flow_controlled_bufferizer_put(&s->ref,refm);
+- }
+- } else {
+- ms_warning("Getting reference signal but no echo to synchronize on.");
+- ms_queue_flush(f->inputs[0]);
+- }
+- }
+-
+- ms_bufferizer_put_from_queue(&s->echo, f->inputs[1]);
+-
+- ref = (int16_t *) alloca(nbytes);
+- echo = (int16_t *) alloca(nbytes);
++ WebRTCAECState *s = (WebRTCAECState *)f->data;
++ int nbytes = s->framesize * sizeof(int16_t);
++ mblk_t *refm;
++ int16_t *ref, *echo;
++ int nbands = 1;
++ int bandsize = s->framesize;
++
++ if (s->bypass_mode) {
++ while ((refm = ms_queue_get(f->inputs[0])) != NULL) {
++ ms_queue_put(f->outputs[0], refm);
++ }
++ while ((refm = ms_queue_get(f->inputs[1])) != NULL) {
++ ms_queue_put(f->outputs[1], refm);
++ }
++ return;
++ }
++
++ if (f->inputs[0] != NULL) {
++ if (s->echostarted) {
++ while ((refm = ms_queue_get(f->inputs[0])) != NULL) {
++ mblk_t *cp = dupmsg(refm);
++ ms_bufferizer_put(&s->delayed_ref, cp);
++ ms_flow_controlled_bufferizer_put(&s->ref, refm);
++ }
++ } else {
++ ms_warning("Getting reference signal but no echo to synchronize on.");
++ ms_queue_flush(f->inputs[0]);
++ }
++ }
++
++ ms_bufferizer_put_from_queue(&s->echo, f->inputs[1]);
++
++ ref = (int16_t *)alloca(nbytes);
++ echo = (int16_t *)alloca(nbytes);
+ #ifdef BUILD_AEC
+- if (s->aec_type == WebRTCAECTypeNormal) {
+- if (s->samplerate > 16000) {
+- nbands = s->samplerate / 16000;
+- bandsize = 160;
+- }
+- if (!s->splitting_filter) {
+- s->splitting_filter = mswebrtc_aec_splitting_filter_create(nbands, bandsize);
+- }
+- }
++ if (s->aec_type == WebRTCAECTypeNormal) {
++ if (s->samplerate > 16000) {
++ nbands = s->samplerate / 16000;
++ bandsize = 160;
++ }
++ if (!s->splitting_filter) {
++ s->splitting_filter =
++ mswebrtc_aec_splitting_filter_create(nbands, bandsize);
++ }
++ }
+ #endif
+- while (ms_bufferizer_read(&s->echo, (uint8_t *)echo, (size_t)nbytes) >= (size_t)nbytes) {
+- mblk_t *oecho = allocb(nbytes, 0);
+- int avail;
+- int avail_samples;
+-
+- if (!s->echostarted) s->echostarted = TRUE;
+- if ((avail = ms_bufferizer_get_avail(&s->delayed_ref)) < ((s->nominal_ref_samples * 2) + nbytes)) {
+- /*we don't have enough to read in a reference signal buffer, inject silence instead*/
+- refm = allocb(nbytes, 0);
+- memset(refm->b_wptr, 0, nbytes);
+- refm->b_wptr += nbytes;
+- ms_bufferizer_put(&s->delayed_ref, refm);
+- /*
+- * However, we don't inject this silence buffer to the sound card, in order to break the following bad loop:
+- * - the sound playback filter detects it has too many pending samples, then triggers an event to request samples to be dropped upstream.
+- * - the upstream MSFlowControl filter is requested to drop samples, which it starts to do.
+- * - necessarily shortly after the AEC goes into a situation where it has not enough reference samples while processing an audio buffer from mic.
+- * - if the AEC injects a silence buffer as output, then it will RECREATE a situation where the sound playback filter has too many pending samples.
+- * That's why we should not do this.
+- * By not doing this, we will create a discrepancy between what we really injected to the soundcard, and what we told to the
+- * echo canceller about the samples we injected. This shifts the echo. The echo canceller will re-converge quickly to take into
+- * account the situation.
+- *
+- */
+- //ms_queue_put(f->outputs[0], dupmsg(refm));
+- if (!s->using_zeroes) {
+- ms_warning("Not enough ref samples, using zeroes");
+- s->using_zeroes = TRUE;
+- }
+- } else {
+- if (s->using_zeroes) {
+- ms_message("Samples are back.");
+- s->using_zeroes = FALSE;
+- }
+- /* read from our no-delay buffer and output */
+- refm = allocb(nbytes, 0);
+- if (ms_flow_controlled_bufferizer_read(&s->ref, refm->b_wptr, nbytes) == 0) {
+- ms_fatal("Should never happen");
+- }
+- refm->b_wptr += nbytes;
+- ms_queue_put(f->outputs[0], refm);
+- }
+-
+- /*now read a valid buffer of delayed ref samples*/
+- if (ms_bufferizer_read(&s->delayed_ref, (uint8_t *)ref, nbytes) == 0) {
+- ms_fatal("Should never happen");
+- }
+- avail -= nbytes;
+- avail_samples = avail / 2;
++ while (ms_bufferizer_read(&s->echo, (uint8_t *)echo, (size_t)nbytes) >=
++ (size_t)nbytes) {
++ mblk_t *oecho = allocb(nbytes, 0);
++ int avail;
++ int avail_samples;
++
++ if (!s->echostarted)
++ s->echostarted = TRUE;
++ if ((avail = ms_bufferizer_get_avail(&s->delayed_ref)) <
++ ((s->nominal_ref_samples * 2) + nbytes)) {
++ /*we don't have enough to read in a reference signal buffer, inject
++ * silence instead*/
++ refm = allocb(nbytes, 0);
++ memset(refm->b_wptr, 0, nbytes);
++ refm->b_wptr += nbytes;
++ ms_bufferizer_put(&s->delayed_ref, refm);
++ /*
++ * However, we don't inject this silence buffer to the sound card, in
++ * order to break the following bad loop:
++ * - the sound playback filter detects it has too many pending samples,
++ * then triggers an event to request samples to be dropped upstream.
++ * - the upstream MSFlowControl filter is requested to drop samples, which
++ * it starts to do.
++ * - necessarily shortly after the AEC goes into a situation where it has
++ * not enough reference samples while processing an audio buffer from mic.
++ * - if the AEC injects a silence buffer as output, then it will RECREATE
++ * a situation where the sound playback filter has too many pending
++ * samples. That's why we should not do this. By not doing this, we will
++ * create a discrepancy between what we really injected to the soundcard,
++ * and what we told to the echo canceller about the samples we injected.
++ * This shifts the echo. The echo canceller will re-converge quickly to
++ * take into account the situation.
++ *
++ */
++ // ms_queue_put(f->outputs[0], dupmsg(refm));
++ if (!s->using_zeroes) {
++ ms_warning("Not enough ref samples, using zeroes");
++ s->using_zeroes = TRUE;
++ }
++ } else {
++ if (s->using_zeroes) {
++ ms_message("Samples are back.");
++ s->using_zeroes = FALSE;
++ }
++ /* read from our no-delay buffer and output */
++ refm = allocb(nbytes, 0);
++ if (ms_flow_controlled_bufferizer_read(&s->ref, refm->b_wptr, nbytes) ==
++ 0) {
++ ms_fatal("Should never happen");
++ }
++ refm->b_wptr += nbytes;
++ ms_queue_put(f->outputs[0], refm);
++ }
++
++ /*now read a valid buffer of delayed ref samples*/
++ if (ms_bufferizer_read(&s->delayed_ref, (uint8_t *)ref, nbytes) == 0) {
++ ms_fatal("Should never happen");
++ }
++ avail -= nbytes;
++ avail_samples = avail / 2;
+
+ #ifdef EC_DUMP
+- if (s->reffile)
+- fwrite(ref, nbytes, 1, s->reffile);
+- if (s->echofile)
+- fwrite(echo, nbytes, 1, s->echofile);
++ if (s->reffile)
++ fwrite(ref, nbytes, 1, s->reffile);
++ if (s->echofile)
++ fwrite(echo, nbytes, 1, s->echofile);
+ #endif
+ #ifdef BUILD_AEC
+- if (s->aec_type == WebRTCAECTypeNormal) {
+- mswebrtc_aec_splitting_filter_analysis(s->splitting_filter, ref, echo);
+- if (WebRtcAec_BufferFarend(s->aecInst,
+- mswebrtc_aec_splitting_filter_get_ref(s->splitting_filter),
+- (size_t)mswebrtc_aec_splitting_filter_get_bandsize(s->splitting_filter)) != 0)
+- ms_error("WebRtcAec_BufferFarend() failed.");
+- if (WebRtcAec_Process(s->aecInst,
+- mswebrtc_aec_splitting_filter_get_echo_bands(s->splitting_filter),
+- mswebrtc_aec_splitting_filter_get_number_of_bands(s->splitting_filter),
+- mswebrtc_aec_splitting_filter_get_output_bands(s->splitting_filter),
+- (size_t)mswebrtc_aec_splitting_filter_get_bandsize(s->splitting_filter), 0, 0) != 0)
+- ms_error("WebRtcAec_Process() failed.");
+- mswebrtc_aec_splitting_filter_synthesis(s->splitting_filter, (int16_t *)oecho->b_wptr);
+- }
++ if (s->aec_type == WebRTCAECTypeNormal) {
++ mswebrtc_aec_splitting_filter_analysis(s->splitting_filter, ref, echo);
++ if (WebRtcAec_BufferFarend(
++ s->aecInst,
++ mswebrtc_aec_splitting_filter_get_ref(s->splitting_filter),
++ (size_t)mswebrtc_aec_splitting_filter_get_bandsize(
++ s->splitting_filter)) != 0)
++ ms_error("WebRtcAec_BufferFarend() failed.");
++ if (WebRtcAec_Process(
++ s->aecInst,
++ mswebrtc_aec_splitting_filter_get_echo_bands(s->splitting_filter),
++ mswebrtc_aec_splitting_filter_get_number_of_bands(
++ s->splitting_filter),
++ mswebrtc_aec_splitting_filter_get_output_bands(
++ s->splitting_filter),
++ (size_t)mswebrtc_aec_splitting_filter_get_bandsize(
++ s->splitting_filter),
++ 0, 0) != 0)
++ ms_error("WebRtcAec_Process() failed.");
++ mswebrtc_aec_splitting_filter_synthesis(s->splitting_filter,
++ (int16_t *)oecho->b_wptr);
++ }
+ #endif
+ #ifdef BUILD_AECM
+- if (s->aec_type == WebRTCAECTypeMobile) {
+- if (WebRtcAecm_BufferFarend(s->aecInst, ref, (size_t)s->framesize) != 0)
+- ms_error("WebRtcAecm_BufferFarend() failed.");
+- if (WebRtcAecm_Process(s->aecInst, echo, NULL, (int16_t *)oecho->b_wptr, (size_t)s->framesize, 0) != 0)
+- ms_error("WebRtcAecm_Process() failed.");
+- }
++ if (s->aec_type == WebRTCAECTypeMobile) {
++ if (WebRtcAecm_BufferFarend(s->aecInst, ref, (size_t)s->framesize) != 0)
++ ms_error("WebRtcAecm_BufferFarend() failed.");
++ if (WebRtcAecm_Process(s->aecInst, echo, NULL, (int16_t *)oecho->b_wptr,
++ (size_t)s->framesize, 0) != 0)
++ ms_error("WebRtcAecm_Process() failed.");
++ }
+ #endif
+ #ifdef EC_DUMP
+- if (s->cleanfile)
+- fwrite(oecho->b_wptr, nbytes, 1, s->cleanfile);
++ if (s->cleanfile)
++ fwrite(oecho->b_wptr, nbytes, 1, s->cleanfile);
+ #endif
+- oecho->b_wptr += nbytes;
+- ms_queue_put(f->outputs[1], oecho);
+- }
++ oecho->b_wptr += nbytes;
++ ms_queue_put(f->outputs[1], oecho);
++ }
+ }
+
+ static void webrtc_aec_postprocess(MSFilter *f) {
+- WebRTCAECState *s = (WebRTCAECState *) f->data;
++ WebRTCAECState *s = (WebRTCAECState *)f->data;
+
+- ms_bufferizer_flush(&s->delayed_ref);
+- ms_bufferizer_flush(&s->echo);
+- ms_flow_controlled_bufferizer_flush(&s->ref);
++ ms_bufferizer_flush(&s->delayed_ref);
++ ms_bufferizer_flush(&s->echo);
++ ms_flow_controlled_bufferizer_flush(&s->ref);
+ #ifdef BUILD_AEC
+- if (s->splitting_filter) {
+- mswebrtc_aec_splitting_filter_destroy(s->splitting_filter);
+- s->splitting_filter = NULL;
+- }
++ if (s->splitting_filter) {
++ mswebrtc_aec_splitting_filter_destroy(s->splitting_filter);
++ s->splitting_filter = NULL;
++ }
+ #endif
+- if (s->aecInst != NULL) {
++ if (s->aecInst != NULL) {
+ #ifdef BUILD_AEC
+- if (s->aec_type == WebRTCAECTypeNormal) {
+- WebRtcAec_Free(s->aecInst);
+- }
++ if (s->aec_type == WebRTCAECTypeNormal) {
++ WebRtcAec_Free(s->aecInst);
++ }
+ #endif
+ #ifdef BUILD_AECM
+- if (s->aec_type == WebRTCAECTypeMobile) {
+- WebRtcAecm_Free(s->aecInst);
+- }
++ if (s->aec_type == WebRTCAECTypeMobile) {
++ WebRtcAecm_Free(s->aecInst);
++ }
+ #endif
+- s->aecInst = NULL;
+- }
++ s->aecInst = NULL;
++ }
+ }
+
+ static int webrtc_aec_set_sr(MSFilter *f, void *arg) {
+- WebRTCAECState *s = (WebRTCAECState *) f->data;
+- int requested_sr = *(int *) arg;
+- int sr = requested_sr;
+-
+- if ((s->aec_type == WebRTCAECTypeNormal) && (requested_sr >= 48000)) {
+- sr = 48000;
+- } else if ((s->aec_type == WebRTCAECTypeNormal) && (requested_sr >= 32000)) {
+- sr = 32000;
+- } else if (requested_sr >= 16000) {
+- sr = 16000;
+- } else {
+- sr = 8000;
+- }
+- if (sr != requested_sr)
+- ms_message("Webrtc %s does not support sampling rate %i, using %i instead", ((s->aec_type == WebRTCAECTypeNormal)?"aec":"aecm"),requested_sr, sr);
+-
+- s->samplerate = sr;
+- configure_flow_controlled_bufferizer(s);
+- return 0;
++ WebRTCAECState *s = (WebRTCAECState *)f->data;
++ int requested_sr = *(int *)arg;
++ int sr = requested_sr;
++
++ if ((s->aec_type == WebRTCAECTypeNormal) && (requested_sr >= 48000)) {
++ sr = 48000;
++ } else if ((s->aec_type == WebRTCAECTypeNormal) && (requested_sr >= 32000)) {
++ sr = 32000;
++ } else if (requested_sr >= 16000) {
++ sr = 16000;
++ } else {
++ sr = 8000;
++ }
++ if (sr != requested_sr)
++ ms_message("Webrtc %s does not support sampling rate %i, using %i instead",
++ ((s->aec_type == WebRTCAECTypeNormal) ? "aec" : "aecm"),
++ requested_sr, sr);
++
++ s->samplerate = sr;
++ configure_flow_controlled_bufferizer(s);
++ return 0;
+ }
+
+ static int webrtc_aec_get_sr(MSFilter *f, void *arg) {
+- WebRTCAECState *s = (WebRTCAECState *) f->data;
+- *(int *) arg=s->samplerate;
+- return 0;
++ WebRTCAECState *s = (WebRTCAECState *)f->data;
++ *(int *)arg = s->samplerate;
++ return 0;
+ }
+
+ static int webrtc_aec_set_framesize(MSFilter *f, void *arg) {
+- /* Do nothing because the WebRTC echo canceller only accept specific values: 80 and 160. We use 80 at 8khz, and 160 at 16khz */
+- return 0;
++ /* Do nothing because the WebRTC echo canceller only accept specific values:
++ * 80 and 160. We use 80 at 8khz, and 160 at 16khz */
++ return 0;
+ }
+
+ static int webrtc_aec_set_delay(MSFilter *f, void *arg) {
+- WebRTCAECState *s = (WebRTCAECState *) f->data;
+- s->delay_ms = *(int *) arg;
+- configure_flow_controlled_bufferizer(s);
+- return 0;
++ WebRTCAECState *s = (WebRTCAECState *)f->data;
++ s->delay_ms = *(int *)arg;
++ configure_flow_controlled_bufferizer(s);
++ return 0;
+ }
+
+ static int webrtc_aec_set_tail_length(MSFilter *f, void *arg) {
+- /* Do nothing because this is not needed by the WebRTC echo canceller. */
+- return 0;
++ /* Do nothing because this is not needed by the WebRTC echo canceller. */
++ return 0;
+ }
+ static int webrtc_aec_set_bypass_mode(MSFilter *f, void *arg) {
+- WebRTCAECState *s = (WebRTCAECState *) f->data;
+- s->bypass_mode = *(bool_t *) arg;
+- ms_message("set EC bypass mode to [%i]", s->bypass_mode);
+- return 0;
++ WebRTCAECState *s = (WebRTCAECState *)f->data;
++ s->bypass_mode = *(bool_t *)arg;
++ ms_message("set EC bypass mode to [%i]", s->bypass_mode);
++ return 0;
+ }
+ static int webrtc_aec_get_bypass_mode(MSFilter *f, void *arg) {
+- WebRTCAECState *s = (WebRTCAECState *) f->data;
+- *(bool_t *) arg = s->bypass_mode;
+- return 0;
++ WebRTCAECState *s = (WebRTCAECState *)f->data;
++ *(bool_t *)arg = s->bypass_mode;
++ return 0;
+ }
+
+ static int webrtc_aec_set_state(MSFilter *f, void *arg) {
+- WebRTCAECState *s = (WebRTCAECState *) f->data;
+- s->state_str = ms_strdup((const char *) arg);
+- return 0;
++ WebRTCAECState *s = (WebRTCAECState *)f->data;
++ s->state_str = ms_strdup((const char *)arg);
++ return 0;
+ }
+
+ static int webrtc_aec_get_state(MSFilter *f, void *arg) {
+- WebRTCAECState *s = (WebRTCAECState *) f->data;
+- *(char **) arg = s->state_str;
+- return 0;
++ WebRTCAECState *s = (WebRTCAECState *)f->data;
++ *(char **)arg = s->state_str;
++ return 0;
+ }
+
+ static MSFilterMethod webrtc_aec_methods[] = {
+- { MS_FILTER_SET_SAMPLE_RATE , webrtc_aec_set_sr },
+- { MS_FILTER_GET_SAMPLE_RATE , webrtc_aec_get_sr },
+- { MS_ECHO_CANCELLER_SET_TAIL_LENGTH , webrtc_aec_set_tail_length },
+- { MS_ECHO_CANCELLER_SET_DELAY , webrtc_aec_set_delay },
+- { MS_ECHO_CANCELLER_SET_FRAMESIZE , webrtc_aec_set_framesize },
+- { MS_ECHO_CANCELLER_SET_BYPASS_MODE , webrtc_aec_set_bypass_mode },
+- { MS_ECHO_CANCELLER_GET_BYPASS_MODE , webrtc_aec_get_bypass_mode },
+- { MS_ECHO_CANCELLER_GET_STATE_STRING , webrtc_aec_get_state },
+- { MS_ECHO_CANCELLER_SET_STATE_STRING , webrtc_aec_set_state },
+- { 0, NULL }
+-};
+-
++ {MS_FILTER_SET_SAMPLE_RATE, webrtc_aec_set_sr},
++ {MS_FILTER_GET_SAMPLE_RATE, webrtc_aec_get_sr},
++ {MS_ECHO_CANCELLER_SET_TAIL_LENGTH, webrtc_aec_set_tail_length},
++ {MS_ECHO_CANCELLER_SET_DELAY, webrtc_aec_set_delay},
++ {MS_ECHO_CANCELLER_SET_FRAMESIZE, webrtc_aec_set_framesize},
++ {MS_ECHO_CANCELLER_SET_BYPASS_MODE, webrtc_aec_set_bypass_mode},
++ {MS_ECHO_CANCELLER_GET_BYPASS_MODE, webrtc_aec_get_bypass_mode},
++ {MS_ECHO_CANCELLER_GET_STATE_STRING, webrtc_aec_get_state},
++ {MS_ECHO_CANCELLER_SET_STATE_STRING, webrtc_aec_set_state},
++ {0, NULL}};
+
+ #ifdef BUILD_AEC
+
+-#define MS_WEBRTC_AEC_NAME "MSWebRTCAEC"
++#define MS_WEBRTC_AEC_NAME "MSWebRTCAEC"
+ #define MS_WEBRTC_AEC_DESCRIPTION "Echo canceller using WebRTC library."
+-#define MS_WEBRTC_AEC_CATEGORY MS_FILTER_OTHER
+-#define MS_WEBRTC_AEC_ENC_FMT NULL
+-#define MS_WEBRTC_AEC_NINPUTS 2
+-#define MS_WEBRTC_AEC_NOUTPUTS 2
+-#define MS_WEBRTC_AEC_FLAGS 0
++#define MS_WEBRTC_AEC_CATEGORY MS_FILTER_OTHER
++#define MS_WEBRTC_AEC_ENC_FMT NULL
++#define MS_WEBRTC_AEC_NINPUTS 2
++#define MS_WEBRTC_AEC_NOUTPUTS 2
++#define MS_WEBRTC_AEC_FLAGS 0
+
+ #ifdef _MSC_VER
+
+ MSFilterDesc ms_webrtc_aec_desc = {
+- MS_FILTER_PLUGIN_ID,
+- MS_WEBRTC_AEC_NAME,
+- MS_WEBRTC_AEC_DESCRIPTION,
+- MS_WEBRTC_AEC_CATEGORY,
+- MS_WEBRTC_AEC_ENC_FMT,
+- MS_WEBRTC_AEC_NINPUTS,
+- MS_WEBRTC_AEC_NOUTPUTS,
+- webrtc_aec_init,
+- webrtc_aec_preprocess,
+- webrtc_aec_process,
+- webrtc_aec_postprocess,
+- webrtc_aec_uninit,
+- webrtc_aec_methods,
+- MS_WEBRTC_AEC_FLAGS
+-};
++ MS_FILTER_PLUGIN_ID, MS_WEBRTC_AEC_NAME, MS_WEBRTC_AEC_DESCRIPTION,
++ MS_WEBRTC_AEC_CATEGORY, MS_WEBRTC_AEC_ENC_FMT, MS_WEBRTC_AEC_NINPUTS,
++ MS_WEBRTC_AEC_NOUTPUTS, webrtc_aec_init, webrtc_aec_preprocess,
++ webrtc_aec_process, webrtc_aec_postprocess, webrtc_aec_uninit,
++ webrtc_aec_methods, MS_WEBRTC_AEC_FLAGS};
+
+ #else
+
+-MSFilterDesc ms_webrtc_aec_desc = {
+- .id = MS_FILTER_PLUGIN_ID,
+- .name = MS_WEBRTC_AEC_NAME,
+- .text = MS_WEBRTC_AEC_DESCRIPTION,
+- .category = MS_WEBRTC_AEC_CATEGORY,
+- .enc_fmt = MS_WEBRTC_AEC_ENC_FMT,
+- .ninputs = MS_WEBRTC_AEC_NINPUTS,
+- .noutputs = MS_WEBRTC_AEC_NOUTPUTS,
+- .init = webrtc_aec_init,
+- .preprocess = webrtc_aec_preprocess,
+- .process = webrtc_aec_process,
+- .postprocess = webrtc_aec_postprocess,
+- .uninit = webrtc_aec_uninit,
+- .methods = webrtc_aec_methods,
+- .flags = MS_WEBRTC_AEC_FLAGS
+-};
++MSFilterDesc ms_webrtc_aec_desc = {.id = MS_FILTER_PLUGIN_ID,
++ .name = MS_WEBRTC_AEC_NAME,
++ .text = MS_WEBRTC_AEC_DESCRIPTION,
++ .category = MS_WEBRTC_AEC_CATEGORY,
++ .enc_fmt = MS_WEBRTC_AEC_ENC_FMT,
++ .ninputs = MS_WEBRTC_AEC_NINPUTS,
++ .noutputs = MS_WEBRTC_AEC_NOUTPUTS,
++ .init = webrtc_aec_init,
++ .preprocess = webrtc_aec_preprocess,
++ .process = webrtc_aec_process,
++ .postprocess = webrtc_aec_postprocess,
++ .uninit = webrtc_aec_uninit,
++ .methods = webrtc_aec_methods,
++ .flags = MS_WEBRTC_AEC_FLAGS};
+
+ #endif
+
+@@ -517,51 +535,40 @@ MS_FILTER_DESC_EXPORT(ms_webrtc_aec_desc)
+
+ #ifdef BUILD_AECM
+
+-#define MS_WEBRTC_AECM_NAME "MSWebRTCAECM"
+-#define MS_WEBRTC_AECM_DESCRIPTION "Echo canceller for mobile using WebRTC library."
+-#define MS_WEBRTC_AECM_CATEGORY MS_FILTER_OTHER
+-#define MS_WEBRTC_AECM_ENC_FMT NULL
+-#define MS_WEBRTC_AECM_NINPUTS 2
+-#define MS_WEBRTC_AECM_NOUTPUTS 2
+-#define MS_WEBRTC_AECM_FLAGS 0
++#define MS_WEBRTC_AECM_NAME "MSWebRTCAECM"
++#define MS_WEBRTC_AECM_DESCRIPTION \
++ "Echo canceller for mobile using WebRTC library."
++#define MS_WEBRTC_AECM_CATEGORY MS_FILTER_OTHER
++#define MS_WEBRTC_AECM_ENC_FMT NULL
++#define MS_WEBRTC_AECM_NINPUTS 2
++#define MS_WEBRTC_AECM_NOUTPUTS 2
++#define MS_WEBRTC_AECM_FLAGS 0
+
+ #ifdef _MSC_VER
+
+ MSFilterDesc ms_webrtc_aecm_desc = {
+- MS_FILTER_PLUGIN_ID,
+- MS_WEBRTC_AECM_NAME,
+- MS_WEBRTC_AECM_DESCRIPTION,
+- MS_WEBRTC_AECM_CATEGORY,
+- MS_WEBRTC_AECM_ENC_FMT,
+- MS_WEBRTC_AECM_NINPUTS,
+- MS_WEBRTC_AECM_NOUTPUTS,
+- webrtc_aecm_init,
+- webrtc_aec_preprocess,
+- webrtc_aec_process,
+- webrtc_aec_postprocess,
+- webrtc_aec_uninit,
+- webrtc_aec_methods,
+- MS_WEBRTC_AECM_FLAGS
+-};
++ MS_FILTER_PLUGIN_ID, MS_WEBRTC_AECM_NAME, MS_WEBRTC_AECM_DESCRIPTION,
++ MS_WEBRTC_AECM_CATEGORY, MS_WEBRTC_AECM_ENC_FMT, MS_WEBRTC_AECM_NINPUTS,
++ MS_WEBRTC_AECM_NOUTPUTS, webrtc_aecm_init, webrtc_aec_preprocess,
++ webrtc_aec_process, webrtc_aec_postprocess, webrtc_aec_uninit,
++ webrtc_aec_methods, MS_WEBRTC_AECM_FLAGS};
+
+ #else
+
+-MSFilterDesc ms_webrtc_aecm_desc = {
+- .id = MS_FILTER_PLUGIN_ID,
+- .name = MS_WEBRTC_AECM_NAME,
+- .text = MS_WEBRTC_AECM_DESCRIPTION,
+- .category = MS_WEBRTC_AECM_CATEGORY,
+- .enc_fmt = MS_WEBRTC_AECM_ENC_FMT,
+- .ninputs = MS_WEBRTC_AECM_NINPUTS,
+- .noutputs = MS_WEBRTC_AECM_NOUTPUTS,
+- .init = webrtc_aecm_init,
+- .preprocess = webrtc_aec_preprocess,
+- .process = webrtc_aec_process,
+- .postprocess = webrtc_aec_postprocess,
+- .uninit = webrtc_aec_uninit,
+- .methods = webrtc_aec_methods,
+- .flags = MS_WEBRTC_AECM_FLAGS
+-};
++MSFilterDesc ms_webrtc_aecm_desc = {.id = MS_FILTER_PLUGIN_ID,
++ .name = MS_WEBRTC_AECM_NAME,
++ .text = MS_WEBRTC_AECM_DESCRIPTION,
++ .category = MS_WEBRTC_AECM_CATEGORY,
++ .enc_fmt = MS_WEBRTC_AECM_ENC_FMT,
++ .ninputs = MS_WEBRTC_AECM_NINPUTS,
++ .noutputs = MS_WEBRTC_AECM_NOUTPUTS,
++ .init = webrtc_aecm_init,
++ .preprocess = webrtc_aec_preprocess,
++ .process = webrtc_aec_process,
++ .postprocess = webrtc_aec_postprocess,
++ .uninit = webrtc_aec_uninit,
++ .methods = webrtc_aec_methods,
++ .flags = MS_WEBRTC_AECM_FLAGS};
+
+ #endif
+
+--
+GitLab
+
diff --git a/mswebrtc-cmake.patch b/mswebrtc-cmake.patch
new file mode 100644
index 0000000..19d0c31
--- /dev/null
+++ b/mswebrtc-cmake.patch
@@ -0,0 +1,626 @@
+From e52911c291e5ebe16da764e53cb740b7deb77e75 Mon Sep 17 00:00:00 2001
+From: Ghislain MARY <ghislain.mary at belledonne-communications.com>
+Date: Mon, 13 Mar 2023 19:05:30 +0100
+Subject: [PATCH] Update CMakeLists.txt so that the project can be added as a
+ subdirectory of linphone-sdk.
+
+Rename CMake targets for uniform naming.
+---
+ CMakeLists.txt | 68 ++++++++++++++++++----------------
+ cmake/FindBcToolbox.cmake | 67 +++++++++++++++++++++++++++++++++
+ cmake/FindMediastreamer2.cmake | 46 +++++++++++++++++++++++
+ cmake/FindOrtp.cmake | 43 +++++++++++++++++++++
+ 4 files changed, 193 insertions(+), 31 deletions(-)
+ create mode 100644 cmake/FindBcToolbox.cmake
+ create mode 100644 cmake/FindMediastreamer2.cmake
+ create mode 100644 cmake/FindOrtp.cmake
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 0f26f4f..fd5b52e 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -1,6 +1,6 @@
+ ############################################################################
+ # CMakeLists.txt
+-# Copyright (C) 2014 Belledonne Communications, Grenoble France
++# Copyright (C) 2014-2023 Belledonne Communications, Grenoble France
+ #
+ ############################################################################
+ #
+@@ -20,7 +20,8 @@
+ #
+ ############################################################################
+
+-cmake_minimum_required(VERSION 3.1)
++cmake_minimum_required(VERSION 3.22)
++
+ project(mswebrtc VERSION 1.1.1 LANGUAGES C CXX)
+
+
+@@ -34,8 +35,6 @@ set(PACKAGE_URL "")
+ set(VERSION "${PACKAGE_VERSION}")
+
+
+-option(ENABLE_SHARED "Build shared library." YES)
+-option(ENABLE_STATIC "Build static library." YES)
+ option(ENABLE_AEC "Enable the WebRTC echo canceller support." YES)
+ option(ENABLE_AECM "Enable the WebRTC echo canceller for mobile support." YES)
+ option(ENABLE_ISAC "Enable the ISAC audio codec support." YES)
+@@ -60,9 +59,20 @@ if(NOT CMAKE_INSTALL_RPATH AND CMAKE_INSTALL_PREFIX)
+ message(STATUS "Setting install rpath to ${CMAKE_INSTALL_RPATH}")
+ endif()
+
+-find_package(Mediastreamer2 REQUIRED CONFIG)
+-find_package(ortp REQUIRED CONFIG)
+-find_package(bctoolbox REQUIRED CONFIG)
++list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
++
++find_package(BcToolbox)
++if(NOT BCTOOLBOX_FOUND)
++ find_package(bctoolbox REQUIRED CONFIG)
++endif()
++find_package(Ortp)
++if(NOT ORTP_FOUND)
++ find_package(ortp REQUIRED CONFIG)
++endif()
++find_package(Mediastreamer2)
++if(NOT MEDIASTREAMER2_FOUND)
++ find_package(Mediastreamer2 REQUIRED CONFIG)
++endif()
+
+ find_library(LIBM NAMES m)
+
+@@ -410,24 +420,18 @@ endif()
+
+ set(MS2_PLUGINS_DIR "${MEDIASTREAMER2_PLUGINS_LOCATION}")
+
+-if(ENABLE_STATIC)
+- add_library(mswebrtc-static STATIC ${SOURCE_FILES})
+- set_target_properties(mswebrtc-static PROPERTIES OUTPUT_NAME mswebrtc)
+- set_target_properties(mswebrtc-static PROPERTIES LINKER_LANGUAGE CXX)
+- target_link_libraries(mswebrtc-static ${LIBS})
+- install(TARGETS mswebrtc-static
+- ARCHIVE DESTINATION "${MS2_PLUGINS_DIR}"
+- PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
+- )
+-endif()
+-if(ENABLE_SHARED)
+- if(NOT IOS)
+- add_library(mswebrtc MODULE ${SOURCE_FILES})
+- else()
++if(BUILD_SHARED_LIBS)
++ if(IOS)
+ add_library(mswebrtc SHARED ${SOURCE_FILES})
++ else()
++ add_library(mswebrtc MODULE ${SOURCE_FILES})
+ endif()
+- target_link_libraries(mswebrtc PRIVATE mediastreamer ortp bctoolbox ${LIBS})
+- set_target_properties(mswebrtc PROPERTIES LINKER_LANGUAGE CXX)
++else()
++ add_library(mswebrtc STATIC ${SOURCE_FILES})
++endif()
++target_link_libraries(mswebrtc PRIVATE mediastreamer2 ortp bctoolbox ${LIBS})
++set_target_properties(mswebrtc PROPERTIES LINKER_LANGUAGE CXX)
++if(BUILD_SHARED_LIBS)
+ if(APPLE)
+ if(IOS)
+ set(MIN_OS ${LINPHONE_IOS_DEPLOYMENT_TARGET})
+@@ -441,7 +445,7 @@ if(ENABLE_SHARED)
+ set(MIN_OS ${CMAKE_OSX_DEPLOYMENT_TARGET})
+ endif()
+
+- set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/build/osx/")
++ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/build/osx/")
+ endif()
+ if(MSVC)
+ if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
+@@ -454,14 +458,16 @@ if(ENABLE_SHARED)
+ set_target_properties(mswebrtc PROPERTIES PREFIX "lib")
+ endif()
+ endif()
+- install(TARGETS mswebrtc
+- RUNTIME DESTINATION ${MS2_PLUGINS_DIR}
+- LIBRARY DESTINATION ${MS2_PLUGINS_DIR}
+- ARCHIVE DESTINATION ${MS2_PLUGINS_DIR}
+- FRAMEWORK DESTINATION Frameworks
+- PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
+- )
+ endif()
+
++install(TARGETS mswebrtc
++ RUNTIME DESTINATION ${MS2_PLUGINS_DIR}
++ LIBRARY DESTINATION ${MS2_PLUGINS_DIR}
++ ARCHIVE DESTINATION ${MS2_PLUGINS_DIR}
++ FRAMEWORK DESTINATION Frameworks
++ PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
++)
++
++
+ add_subdirectory(build)
+
+diff --git a/cmake/FindBcToolbox.cmake b/cmake/FindBcToolbox.cmake
+new file mode 100644
+index 0000000..5766478
+--- /dev/null
++++ b/cmake/FindBcToolbox.cmake
+@@ -0,0 +1,67 @@
++############################################################################
++# FindBctoolbox.cmake
++# Copyright (C) 2023 Belledonne Communications, Grenoble France
++#
++############################################################################
++#
++# This program is free software; you can redistribute it and/or
++# modify it under the terms of the GNU General Public License
++# as published by the Free Software Foundation; either version 2
++# of the License, or (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
++#
++############################################################################
++#
++# - Find the bctoolbox include files and library
++#
++# BCTOOLBOX_FOUND - System has lib bctoolbox
++# BCTOOLBOX_INCLUDE_DIRS - The bctoolbox include directories
++# BCTOOLBOX_LIBRARIES - The libraries needed to use bctoolbox
++# BCTOOLBOX_CMAKE_DIR - The bctoolbox cmake directory
++# BCTOOLBOX_CORE_FOUND - System has core bctoolbox
++# BCTOOLBOX_CORE_INCLUDE_DIRS - The core bctoolbox include directories
++# BCTOOLBOX_CORE_LIBRARIES - The core bctoolbox libraries
++# BCTOOLBOX_TESTER_FOUND - System has bctoolbox tester
++# BCTOOLBOX_TESTER_INCLUDE_DIRS - The bctoolbox tester include directories
++# BCTOOLBOX_TESTER_LIBRARIES - The bctoolbox tester libraries
++
++if(TARGET bctoolbox)
++
++ set(BCTOOLBOX_CORE_LIBRARIES bctoolbox)
++ get_target_property(BCTOOLBOX_CORE_INCLUDE_DIRS bctoolbox INTERFACE_INCLUDE_DIRECTORIES)
++ set(BCTOOLBOX_CORE_FOUND TRUE)
++ get_target_property(BCTOOLBOX_SOURCE_DIR bctoolbox SOURCE_DIR)
++ set(BCTOOLBOX_CMAKE_DIR "${BCTOOLBOX_SOURCE_DIR}/../cmake")
++ if(TARGET bctoolbox-tester)
++ set(BCTOOLBOX_TESTER_LIBRARIES bctoolbox-tester)
++ get_target_property(BCTOOLBOX_TESTER_INCLUDE_DIRS bctoolbox-tester INTERFACE_INCLUDE_DIRECTORIES)
++ set(BCTOOLBOX_TESTER_FOUND TRUE)
++ set(BCTOOLBOX_TESTER_COMPONENT_VARIABLES BCTOOLBOX_TESTER_FOUND BCTOOLBOX_TESTER_INCLUDE_DIRS BCTOOLBOX_TESTER_LIBRARIES)
++ endif()
++ set(BCTOOLBOX_LIBRARIES ${BCTOOLBOX_CORE_LIBRARIES} ${BCTOOLBOX_TESTER_LIBRARIES})
++ set(BCTOOLBOX_INCLUDE_DIRS ${BCTOOLBOX_CORE_INCLUDE_DIRS} ${BCTOOLBOX_TESTER_INCLUDE_DIRS})
++
++
++ include(FindPackageHandleStandardArgs)
++ find_package_handle_standard_args(BcToolbox
++ DEFAULT_MSG
++ BCTOOLBOX_INCLUDE_DIRS BCTOOLBOX_LIBRARIES BCTOOLBOX_CMAKE_DIR
++ BCTOOLBOX_CORE_FOUND BCTOOLBOX_CORE_INCLUDE_DIRS BCTOOLBOX_CORE_LIBRARIES
++ ${BCTOOLBOX_TESTER_COMPONENT_VARIABLES}
++ )
++
++ mark_as_advanced(
++ BCTOOLBOX_INCLUDE_DIRS BCTOOLBOX_LIBRARIES BCTOOLBOX_CMAKE_DIR
++ BCTOOLBOX_CORE_FOUND BCTOOLBOX_CORE_INCLUDE_DIRS BCTOOLBOX_CORE_LIBRARIES
++ ${BCTOOLBOX_TESTER_COMPONENT_VARIABLES}
++ )
++
++endif()
+diff --git a/cmake/FindMediastreamer2.cmake b/cmake/FindMediastreamer2.cmake
+new file mode 100644
+index 0000000..64ac8f2
+--- /dev/null
++++ b/cmake/FindMediastreamer2.cmake
+@@ -0,0 +1,46 @@
++############################################################################
++# FindMediastreamer2.cmake
++# Copyright (C) 2023 Belledonne Communications, Grenoble France
++#
++############################################################################
++#
++# This program is free software; you can redistribute it and/or
++# modify it under the terms of the GNU General Public License
++# as published by the Free Software Foundation; either version 2
++# of the License, or (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
++#
++############################################################################
++#
++# - Find the mediastreamer2 include files and library
++#
++# MEDIASTREAMER2_FOUND - system has lib mediastreamer2
++# MEDIASTREAMER2_INCLUDE_DIRS - the mediasteamer2 include directory
++# MEDIASTREAMER2_LIBRARIES - The library needed to use mediasteamer2
++# MEDIASTREAMER2_PLUGINS_LOCATION - The location of the mediastreamer2 plugins
++
++if(TARGET mediastreamer2)
++
++ set(MEDIASTREAMER2_LIBRARIES mediastreamer2)
++ get_target_property(MEDIASTREAMER2_INCLUDE_DIRS mediastreamer2 INTERFACE_INCLUDE_DIRECTORIES)
++ define_property(TARGET PROPERTY "MS2_PLUGINS" BRIEF_DOCS "Stores the location of mediastreamer2 plugins" FULL_DOCS "Stores the location of mediastreamer2 plugins")
++ get_target_property(MEDIASTREAMER2_PLUGINS_LOCATION mediastreamer2 MS2_PLUGINS)
++
++
++ include(FindPackageHandleStandardArgs)
++ find_package_handle_standard_args(Mediastreamer2
++ DEFAULT_MSG
++ MEDIASTREAMER2_INCLUDE_DIRS MEDIASTREAMER2_LIBRARIES
++ )
++
++ mark_as_advanced(MEDIASTREAMER2_INCLUDE_DIRS MEDIASTREAMER2_LIBRARIES)
++
++endif()
+diff --git a/cmake/FindOrtp.cmake b/cmake/FindOrtp.cmake
+new file mode 100644
+index 0000000..13121fb
+--- /dev/null
++++ b/cmake/FindOrtp.cmake
+@@ -0,0 +1,43 @@
++############################################################################
++# FindOrtp.cmake
++# Copyright (C) 2023 Belledonne Communications, Grenoble France
++#
++############################################################################
++#
++# This program is free software; you can redistribute it and/or
++# modify it under the terms of the GNU General Public License
++# as published by the Free Software Foundation; either version 2
++# of the License, or (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
++#
++############################################################################
++#
++# - Find the ortp include files and library
++#
++# ORTP_FOUND - system has lib ortp
++# ORTP_INCLUDE_DIRS - the ortp include directory
++# ORTP_LIBRARIES - The library needed to use ortp
++
++if(TARGET ortp)
++
++ set(ORTP_LIBRARIES ortp)
++ get_target_property(ORTP_INCLUDE_DIRS ortp INTERFACE_INCLUDE_DIRECTORIES)
++
++
++ include(FindPackageHandleStandardArgs)
++ find_package_handle_standard_args(Ortp
++ DEFAULT_MSG
++ ORTP_INCLUDE_DIRS ORTP_LIBRARIES
++ )
++
++ mark_as_advanced(ORTP_INCLUDE_DIRS ORTP_LIBRARIES)
++
++endif()
+--
+GitLab
+
+From b5aea9bdaeecd99f6fc5601bfb88541d4e55841b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Micka=C3=ABl=20Turnel?=
+ <mickael.turnel at belledonne-communications.com>
+Date: Fri, 23 Jun 2023 11:05:24 +0200
+Subject: [PATCH] Change the library path in the binary dir so it can be
+ retrieved easily by testers
+
+---
+ CMakeLists.txt | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index fd5b52e..ab3e651 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -24,6 +24,7 @@ cmake_minimum_required(VERSION 3.22)
+
+ project(mswebrtc VERSION 1.1.1 LANGUAGES C CXX)
+
++set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/mediastreamer2/plugins")
+
+ set(PACKAGE "${PROJECT_NAME}")
+ set(PACKAGE_NAME "${PROJECT_NAME}")
+--
+GitLab
+
+From 1809337d6191ec40f88191b5ce07cfb01ed07b20 Mon Sep 17 00:00:00 2001
+From: Ghislain MARY <ghislain.mary at belledonne-communications.com>
+Date: Tue, 20 Jun 2023 11:47:00 +0200
+Subject: [PATCH] Improve CMake find_package functionality.
+
+---
+ CMakeLists.txt | 30 ++++-----------
+ build/CMakeLists.txt | 3 +-
+ cmake/FindBcToolbox.cmake | 67 ----------------------------------
+ cmake/FindMediastreamer2.cmake | 46 -----------------------
+ cmake/FindOrtp.cmake | 43 ----------------------
+ 5 files changed, 10 insertions(+), 179 deletions(-)
+ delete mode 100644 cmake/FindBcToolbox.cmake
+ delete mode 100644 cmake/FindMediastreamer2.cmake
+ delete mode 100644 cmake/FindOrtp.cmake
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index ab3e651..a869908 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -22,7 +22,7 @@
+
+ cmake_minimum_required(VERSION 3.22)
+
+-project(mswebrtc VERSION 1.1.1 LANGUAGES C CXX)
++project(MSWebRTC VERSION 1.1.1 LANGUAGES C CXX)
+
+ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/mediastreamer2/plugins")
+
+@@ -60,20 +60,8 @@ if(NOT CMAKE_INSTALL_RPATH AND CMAKE_INSTALL_PREFIX)
+ message(STATUS "Setting install rpath to ${CMAKE_INSTALL_RPATH}")
+ endif()
+
+-list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+-
+-find_package(BcToolbox)
+-if(NOT BCTOOLBOX_FOUND)
+- find_package(bctoolbox REQUIRED CONFIG)
+-endif()
+-find_package(Ortp)
+-if(NOT ORTP_FOUND)
+- find_package(ortp REQUIRED CONFIG)
+-endif()
+-find_package(Mediastreamer2)
+-if(NOT MEDIASTREAMER2_FOUND)
+- find_package(Mediastreamer2 REQUIRED CONFIG)
+-endif()
++find_package(BCToolbox 5.3.0 REQUIRED)
++find_package(Mediastreamer2 5.3.0 REQUIRED)
+
+ find_library(LIBM NAMES m)
+
+@@ -92,7 +80,7 @@ endif()
+ if(ENABLE_VAD)
+ set(BUILD_VAD 1)
+ endif()
+-configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
++configure_file("${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake" "${CMAKE_CURRENT_BINARY_DIR}/config.h")
+
+ set(WEBRTC_ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/webrtc")
+ set(WEBRTC_SRC_DIR "${WEBRTC_ROOT_DIR}/webrtc")
+@@ -419,8 +407,6 @@ if(LIBM)
+ list(APPEND LIBS ${LIBM})
+ endif()
+
+-set(MS2_PLUGINS_DIR "${MEDIASTREAMER2_PLUGINS_LOCATION}")
+-
+ if(BUILD_SHARED_LIBS)
+ if(IOS)
+ add_library(mswebrtc SHARED ${SOURCE_FILES})
+@@ -430,7 +416,7 @@ if(BUILD_SHARED_LIBS)
+ else()
+ add_library(mswebrtc STATIC ${SOURCE_FILES})
+ endif()
+-target_link_libraries(mswebrtc PRIVATE mediastreamer2 ortp bctoolbox ${LIBS})
++target_link_libraries(mswebrtc PRIVATE ${Mediastreamer2_TARGET} ${LIBS})
+ set_target_properties(mswebrtc PROPERTIES LINKER_LANGUAGE CXX)
+ if(BUILD_SHARED_LIBS)
+ if(APPLE)
+@@ -462,9 +448,9 @@ if(BUILD_SHARED_LIBS)
+ endif()
+
+ install(TARGETS mswebrtc
+- RUNTIME DESTINATION ${MS2_PLUGINS_DIR}
+- LIBRARY DESTINATION ${MS2_PLUGINS_DIR}
+- ARCHIVE DESTINATION ${MS2_PLUGINS_DIR}
++ RUNTIME DESTINATION ${Mediastreamer2_PLUGINS_DIR}
++ LIBRARY DESTINATION ${Mediastreamer2_PLUGINS_DIR}
++ ARCHIVE DESTINATION ${Mediastreamer2_PLUGINS_DIR}
+ FRAMEWORK DESTINATION Frameworks
+ PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
+ )
+diff --git a/build/CMakeLists.txt b/build/CMakeLists.txt
+index 82694c6..8f9108b 100755
+--- a/build/CMakeLists.txt
++++ b/build/CMakeLists.txt
+@@ -21,7 +21,8 @@
+ ############################################################################
+
+ if(NOT CPACK_PACKAGE_NAME)
+- set(CPACK_PACKAGE_NAME "${PROJECT_NAME}")
++ string(TOLOWER "${PROJECT_NAME}" LOWERCASE_PROJECT_NAME)
++ set(CPACK_PACKAGE_NAME "${LOWERCASE_PROJECT_NAME}")
+ endif()
+
+ set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/../COPYING")
+diff --git a/cmake/FindBcToolbox.cmake b/cmake/FindBcToolbox.cmake
+deleted file mode 100644
+index 5766478..0000000
+--- a/cmake/FindBcToolbox.cmake
++++ /dev/null
+@@ -1,67 +0,0 @@
+-############################################################################
+-# FindBctoolbox.cmake
+-# Copyright (C) 2023 Belledonne Communications, Grenoble France
+-#
+-############################################################################
+-#
+-# This program is free software; you can redistribute it and/or
+-# modify it under the terms of the GNU General Public License
+-# as published by the Free Software Foundation; either version 2
+-# of the License, or (at your option) any later version.
+-#
+-# This program is distributed in the hope that it will be useful,
+-# but WITHOUT ANY WARRANTY; without even the implied warranty of
+-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-# GNU General Public License for more details.
+-#
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+-#
+-############################################################################
+-#
+-# - Find the bctoolbox include files and library
+-#
+-# BCTOOLBOX_FOUND - System has lib bctoolbox
+-# BCTOOLBOX_INCLUDE_DIRS - The bctoolbox include directories
+-# BCTOOLBOX_LIBRARIES - The libraries needed to use bctoolbox
+-# BCTOOLBOX_CMAKE_DIR - The bctoolbox cmake directory
+-# BCTOOLBOX_CORE_FOUND - System has core bctoolbox
+-# BCTOOLBOX_CORE_INCLUDE_DIRS - The core bctoolbox include directories
+-# BCTOOLBOX_CORE_LIBRARIES - The core bctoolbox libraries
+-# BCTOOLBOX_TESTER_FOUND - System has bctoolbox tester
+-# BCTOOLBOX_TESTER_INCLUDE_DIRS - The bctoolbox tester include directories
+-# BCTOOLBOX_TESTER_LIBRARIES - The bctoolbox tester libraries
+-
+-if(TARGET bctoolbox)
+-
+- set(BCTOOLBOX_CORE_LIBRARIES bctoolbox)
+- get_target_property(BCTOOLBOX_CORE_INCLUDE_DIRS bctoolbox INTERFACE_INCLUDE_DIRECTORIES)
+- set(BCTOOLBOX_CORE_FOUND TRUE)
+- get_target_property(BCTOOLBOX_SOURCE_DIR bctoolbox SOURCE_DIR)
+- set(BCTOOLBOX_CMAKE_DIR "${BCTOOLBOX_SOURCE_DIR}/../cmake")
+- if(TARGET bctoolbox-tester)
+- set(BCTOOLBOX_TESTER_LIBRARIES bctoolbox-tester)
+- get_target_property(BCTOOLBOX_TESTER_INCLUDE_DIRS bctoolbox-tester INTERFACE_INCLUDE_DIRECTORIES)
+- set(BCTOOLBOX_TESTER_FOUND TRUE)
+- set(BCTOOLBOX_TESTER_COMPONENT_VARIABLES BCTOOLBOX_TESTER_FOUND BCTOOLBOX_TESTER_INCLUDE_DIRS BCTOOLBOX_TESTER_LIBRARIES)
+- endif()
+- set(BCTOOLBOX_LIBRARIES ${BCTOOLBOX_CORE_LIBRARIES} ${BCTOOLBOX_TESTER_LIBRARIES})
+- set(BCTOOLBOX_INCLUDE_DIRS ${BCTOOLBOX_CORE_INCLUDE_DIRS} ${BCTOOLBOX_TESTER_INCLUDE_DIRS})
+-
+-
+- include(FindPackageHandleStandardArgs)
+- find_package_handle_standard_args(BcToolbox
+- DEFAULT_MSG
+- BCTOOLBOX_INCLUDE_DIRS BCTOOLBOX_LIBRARIES BCTOOLBOX_CMAKE_DIR
+- BCTOOLBOX_CORE_FOUND BCTOOLBOX_CORE_INCLUDE_DIRS BCTOOLBOX_CORE_LIBRARIES
+- ${BCTOOLBOX_TESTER_COMPONENT_VARIABLES}
+- )
+-
+- mark_as_advanced(
+- BCTOOLBOX_INCLUDE_DIRS BCTOOLBOX_LIBRARIES BCTOOLBOX_CMAKE_DIR
+- BCTOOLBOX_CORE_FOUND BCTOOLBOX_CORE_INCLUDE_DIRS BCTOOLBOX_CORE_LIBRARIES
+- ${BCTOOLBOX_TESTER_COMPONENT_VARIABLES}
+- )
+-
+-endif()
+diff --git a/cmake/FindMediastreamer2.cmake b/cmake/FindMediastreamer2.cmake
+deleted file mode 100644
+index 64ac8f2..0000000
+--- a/cmake/FindMediastreamer2.cmake
++++ /dev/null
+@@ -1,46 +0,0 @@
+-############################################################################
+-# FindMediastreamer2.cmake
+-# Copyright (C) 2023 Belledonne Communications, Grenoble France
+-#
+-############################################################################
+-#
+-# This program is free software; you can redistribute it and/or
+-# modify it under the terms of the GNU General Public License
+-# as published by the Free Software Foundation; either version 2
+-# of the License, or (at your option) any later version.
+-#
+-# This program is distributed in the hope that it will be useful,
+-# but WITHOUT ANY WARRANTY; without even the implied warranty of
+-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-# GNU General Public License for more details.
+-#
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+-#
+-############################################################################
+-#
+-# - Find the mediastreamer2 include files and library
+-#
+-# MEDIASTREAMER2_FOUND - system has lib mediastreamer2
+-# MEDIASTREAMER2_INCLUDE_DIRS - the mediasteamer2 include directory
+-# MEDIASTREAMER2_LIBRARIES - The library needed to use mediasteamer2
+-# MEDIASTREAMER2_PLUGINS_LOCATION - The location of the mediastreamer2 plugins
+-
+-if(TARGET mediastreamer2)
+-
+- set(MEDIASTREAMER2_LIBRARIES mediastreamer2)
+- get_target_property(MEDIASTREAMER2_INCLUDE_DIRS mediastreamer2 INTERFACE_INCLUDE_DIRECTORIES)
+- define_property(TARGET PROPERTY "MS2_PLUGINS" BRIEF_DOCS "Stores the location of mediastreamer2 plugins" FULL_DOCS "Stores the location of mediastreamer2 plugins")
+- get_target_property(MEDIASTREAMER2_PLUGINS_LOCATION mediastreamer2 MS2_PLUGINS)
+-
+-
+- include(FindPackageHandleStandardArgs)
+- find_package_handle_standard_args(Mediastreamer2
+- DEFAULT_MSG
+- MEDIASTREAMER2_INCLUDE_DIRS MEDIASTREAMER2_LIBRARIES
+- )
+-
+- mark_as_advanced(MEDIASTREAMER2_INCLUDE_DIRS MEDIASTREAMER2_LIBRARIES)
+-
+-endif()
+diff --git a/cmake/FindOrtp.cmake b/cmake/FindOrtp.cmake
+deleted file mode 100644
+index 13121fb..0000000
+--- a/cmake/FindOrtp.cmake
++++ /dev/null
+@@ -1,43 +0,0 @@
+-############################################################################
+-# FindOrtp.cmake
+-# Copyright (C) 2023 Belledonne Communications, Grenoble France
+-#
+-############################################################################
+-#
+-# This program is free software; you can redistribute it and/or
+-# modify it under the terms of the GNU General Public License
+-# as published by the Free Software Foundation; either version 2
+-# of the License, or (at your option) any later version.
+-#
+-# This program is distributed in the hope that it will be useful,
+-# but WITHOUT ANY WARRANTY; without even the implied warranty of
+-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-# GNU General Public License for more details.
+-#
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+-#
+-############################################################################
+-#
+-# - Find the ortp include files and library
+-#
+-# ORTP_FOUND - system has lib ortp
+-# ORTP_INCLUDE_DIRS - the ortp include directory
+-# ORTP_LIBRARIES - The library needed to use ortp
+-
+-if(TARGET ortp)
+-
+- set(ORTP_LIBRARIES ortp)
+- get_target_property(ORTP_INCLUDE_DIRS ortp INTERFACE_INCLUDE_DIRECTORIES)
+-
+-
+- include(FindPackageHandleStandardArgs)
+- find_package_handle_standard_args(Ortp
+- DEFAULT_MSG
+- ORTP_INCLUDE_DIRS ORTP_LIBRARIES
+- )
+-
+- mark_as_advanced(ORTP_INCLUDE_DIRS ORTP_LIBRARIES)
+-
+-endif()
+--
+GitLab
+
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/mediastreamer-plugin-mswebrtc.git/commitdiff/41e110f6da51acf50f60cd2edb39e98b73152d5a
More information about the pld-cvs-commit
mailing list