summaryrefslogtreecommitdiff
path: root/res/res_format_attr_opus.c
diff options
context:
space:
mode:
authorMark Michelson <mmichelson@digium.com>2016-11-16 15:42:39 -0600
committerMark Michelson <mmichelson@digium.com>2016-11-16 16:49:04 -0500
commitdc8f99ee27bd9c2ed2524bf01825ac65234f59ba (patch)
tree3e07efd45e0c4f060a1b3e8379e29d2c505cacb1 /res/res_format_attr_opus.c
parent732ab6a045e1d4de5bf7a8256376dbe24406eed6 (diff)
res_format_attr_opus: Fix fmtp generation.
res_format_attr_opus assumed that the string being passed into it was empty. It tried to determine if the only thing it had written was a=fmtp:<num> And if it had, it would reset the string. Its calculation was off when working with chan_sip, though. chan_sip passes the entire built SDP rather than an empty string. This resulted in always putting an empty fmtp line in the SDP. ASTERISK-26520 #close Reported by scgm11 Change-Id: Ib2e8712d26a47067e5f36d5973577added01dbb5
Diffstat (limited to 'res/res_format_attr_opus.c')
-rw-r--r--res/res_format_attr_opus.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/res/res_format_attr_opus.c b/res/res_format_attr_opus.c
index a3e48e3de..81a07a1f6 100644
--- a/res/res_format_attr_opus.c
+++ b/res/res_format_attr_opus.c
@@ -156,7 +156,8 @@ static struct ast_format *opus_parse_sdp_fmtp(const struct ast_format *format, c
static void opus_generate_sdp_fmtp(const struct ast_format *format, unsigned int payload, struct ast_str **str)
{
struct opus_attr *attr = ast_format_get_attribute_data(format);
- int size;
+ int base_fmtp_size;
+ int original_size;
if (!attr) {
/*
@@ -167,7 +168,8 @@ static void opus_generate_sdp_fmtp(const struct ast_format *format, unsigned int
attr = &default_opus_attr;
}
- size = ast_str_append(str, 0, "a=fmtp:%u ", payload);
+ original_size = ast_str_strlen(*str);
+ base_fmtp_size = ast_str_append(str, 0, "a=fmtp:%u ", payload);
if (CODEC_OPUS_DEFAULT_SAMPLE_RATE != attr->maxplayrate) {
ast_str_append(str, 0, "%s=%d;",
@@ -209,8 +211,8 @@ static void opus_generate_sdp_fmtp(const struct ast_format *format, unsigned int
CODEC_OPUS_ATTR_DTX, attr->dtx);
}
- if (size == ast_str_strlen(*str)) {
- ast_str_reset(*str);
+ if (base_fmtp_size == ast_str_strlen(*str) - original_size) {
+ ast_str_truncate(*str, original_size);
} else {
ast_str_truncate(*str, -1);
ast_str_append(str, 0, "\r\n");