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
This commit is contained in:
parent
732ab6a045
commit
dc8f99ee27
|
@ -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)
|
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);
|
struct opus_attr *attr = ast_format_get_attribute_data(format);
|
||||||
int size;
|
int base_fmtp_size;
|
||||||
|
int original_size;
|
||||||
|
|
||||||
if (!attr) {
|
if (!attr) {
|
||||||
/*
|
/*
|
||||||
|
@ -167,7 +168,8 @@ static void opus_generate_sdp_fmtp(const struct ast_format *format, unsigned int
|
||||||
attr = &default_opus_attr;
|
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) {
|
if (CODEC_OPUS_DEFAULT_SAMPLE_RATE != attr->maxplayrate) {
|
||||||
ast_str_append(str, 0, "%s=%d;",
|
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);
|
CODEC_OPUS_ATTR_DTX, attr->dtx);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (size == ast_str_strlen(*str)) {
|
if (base_fmtp_size == ast_str_strlen(*str) - original_size) {
|
||||||
ast_str_reset(*str);
|
ast_str_truncate(*str, original_size);
|
||||||
} else {
|
} else {
|
||||||
ast_str_truncate(*str, -1);
|
ast_str_truncate(*str, -1);
|
||||||
ast_str_append(str, 0, "\r\n");
|
ast_str_append(str, 0, "\r\n");
|
||||||
|
|
Loading…
Reference in New Issue