summaryrefslogtreecommitdiff
path: root/modules/opus/opus.c
diff options
context:
space:
mode:
Diffstat (limited to 'modules/opus/opus.c')
-rw-r--r--modules/opus/opus.c40
1 files changed, 37 insertions, 3 deletions
diff --git a/modules/opus/opus.c b/modules/opus/opus.c
index 10d9f46..d1e9c24 100644
--- a/modules/opus/opus.c
+++ b/modules/opus/opus.c
@@ -35,25 +35,59 @@
*/
+static bool opus_mirror;
+static char fmtp[256] = "stereo=1;sprop-stereo=1";
+static char fmtp_mirror[256];
+
+
+static int opus_fmtp_enc(struct mbuf *mb, const struct sdp_format *fmt,
+ bool offer, void *arg)
+{
+ bool mirror;
+
+ (void)arg;
+ (void)offer;
+
+ if (!mb || !fmt)
+ return 0;
+
+ mirror = !offer && str_isset(fmtp_mirror);
+
+ return mbuf_printf(mb, "a=fmtp:%s %s\r\n",
+ fmt->id, mirror ? fmtp_mirror : fmtp);
+}
+
+
static struct aucodec opus = {
.name = "opus",
.srate = 48000,
.crate = 48000,
.ch = 2,
- .fmtp = "stereo=1;sprop-stereo=1",
+ .fmtp = NULL,
.encupdh = opus_encode_update,
.ench = opus_encode_frm,
.decupdh = opus_decode_update,
.dech = opus_decode_frm,
.plch = opus_decode_pkloss,
+ .fmtp_ench = opus_fmtp_enc,
};
+void opus_mirror_params(const char *x)
+{
+ if (!opus_mirror)
+ return;
+
+ info("opus: mirror parameters: \"%s\"\n", x);
+
+ str_ncpy(fmtp_mirror, x, sizeof(fmtp_mirror));
+}
+
+
static int module_init(void)
{
struct conf *conf = conf_cur();
uint32_t value;
- static char fmtp[256] = "stereo=1;sprop-stereo=1";
char *p = fmtp + str_len(fmtp);
bool b;
int n = 0;
@@ -98,7 +132,7 @@ static int module_init(void)
p += n;
}
- opus.fmtp = fmtp;
+ (void)conf_get_bool(conf, "opus_mirror", &opus_mirror);
debug("opus: fmtp=\"%s\"\n", fmtp);