diff options
author | Alexander Traud <pabstraud@compuserve.com> | 2015-11-19 08:03:54 +0100 |
---|---|---|
committer | Alexander Traud <pabstraud@compuserve.com> | 2015-11-19 08:09:51 +0100 |
commit | 92ea46ba94028c7082a0e1ae8fb22d9a327c90fa (patch) | |
tree | 8e3c08cb6ef193d40f2300ac62ecdca7ccf27d48 /res/res_format_attr_h264.c | |
parent | e90bb44b76d1c34817b5ad7db34c1c595c644702 (diff) |
res_format_attr_h264: Do not reset string buffer.
When no parameter is present, Asterisk does not generate the line fmtp, as
expected. However, because a buffer was reset, even rtpmap and fmtp of previous
media codecs got removed. Now, Asterisk does not reset other codecs in case of
no parameter for H.264.
ASTERISK-25573 #close
Change-Id: I93811331f4a28c45418a9e14ee46c0debd47a286
Diffstat (limited to 'res/res_format_attr_h264.c')
-rw-r--r-- | res/res_format_attr_h264.c | 16 |
1 files changed, 6 insertions, 10 deletions
diff --git a/res/res_format_attr_h264.c b/res/res_format_attr_h264.c index 95274691c..ccf2176f2 100644 --- a/res/res_format_attr_h264.c +++ b/res/res_format_attr_h264.c @@ -236,7 +236,7 @@ static struct ast_format *h264_parse_sdp_fmtp(const struct ast_format *format, c if (field != H264_ATTR_KEY_UNSET) { \ if (added) { \ ast_str_append(str, 0, ";"); \ - } else { \ + } else if (0 < ast_str_append(str, 0, "a=fmtp:%u ", payload)) { \ added = 1; \ } \ ast_str_append(str, 0, "%s=%u", name, field); \ @@ -247,7 +247,7 @@ static struct ast_format *h264_parse_sdp_fmtp(const struct ast_format *format, c if (field) { \ if (added) { \ ast_str_append(str, 0, ";"); \ - } else { \ + } else if (0 < ast_str_append(str, 0, "a=fmtp:%u ", payload)) { \ added = 1; \ } \ ast_str_append(str, 0, "%s=%u", name, field); \ @@ -263,8 +263,6 @@ static void h264_generate_sdp_fmtp(const struct ast_format *format, unsigned int return; } - ast_str_append(str, 0, "a=fmtp:%u ", payload); - APPEND_IF_NONZERO(attr->MAX_MBPS, str, "max-mbps"); APPEND_IF_NONZERO(attr->MAX_FS, str, "max-fs"); APPEND_IF_NONZERO(attr->MAX_CPB, str, "max-cpb"); @@ -287,7 +285,7 @@ static void h264_generate_sdp_fmtp(const struct ast_format *format, unsigned int if (attr->PROFILE_IDC && attr->PROFILE_IOP && attr->LEVEL) { if (added) { ast_str_append(str, 0, ";"); - } else { + } else if (0 < ast_str_append(str, 0, "a=fmtp:%u ", payload)) { added = 1; } ast_str_append(str, 0, "profile-level-id=%02X%02X%02X", attr->PROFILE_IDC, attr->PROFILE_IOP, attr->LEVEL); @@ -296,15 +294,13 @@ static void h264_generate_sdp_fmtp(const struct ast_format *format, unsigned int if (!ast_strlen_zero(attr->SPS) && !ast_strlen_zero(attr->PPS)) { if (added) { ast_str_append(str, 0, ";"); - } else { + } else if (0 < ast_str_append(str, 0, "a=fmtp:%u ", payload)) { added = 1; } - ast_str_append(str, 0, ";sprop-parameter-sets=%s,%s", attr->SPS, attr->PPS); + ast_str_append(str, 0, "sprop-parameter-sets=%s,%s", attr->SPS, attr->PPS); } - if (!added) { - ast_str_reset(*str); - } else { + if (added) { ast_str_append(str, 0, "\r\n"); } |