From dc8f99ee27bd9c2ed2524bf01825ac65234f59ba Mon Sep 17 00:00:00 2001 From: Mark Michelson Date: Wed, 16 Nov 2016 15:42:39 -0600 Subject: 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: 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 --- res/res_format_attr_opus.c | 10 ++++++---- 1 file 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"); -- cgit v1.2.3