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
changes/62/1662/1
Alexander Traud 10 years ago
parent ccf80f95a2
commit 1aa552b2a2

@ -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 (field != H264_ATTR_KEY_UNSET) { \
if (added) { \ if (added) { \
ast_str_append(str, 0, ";"); \ ast_str_append(str, 0, ";"); \
} else { \ } else if (0 < ast_str_append(str, 0, "a=fmtp:%u ", payload)) { \
added = 1; \ added = 1; \
} \ } \
ast_str_append(str, 0, "%s=%u", name, field); \ 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 (field) { \
if (added) { \ if (added) { \
ast_str_append(str, 0, ";"); \ ast_str_append(str, 0, ";"); \
} else { \ } else if (0 < ast_str_append(str, 0, "a=fmtp:%u ", payload)) { \
added = 1; \ added = 1; \
} \ } \
ast_str_append(str, 0, "%s=%u", name, field); \ 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; return;
} }
ast_str_append(str, 0, "a=fmtp:%u ", payload);
APPEND_IF_NONZERO(attr->MAX_MBPS, str, "max-mbps"); APPEND_IF_NONZERO(attr->MAX_MBPS, str, "max-mbps");
APPEND_IF_NONZERO(attr->MAX_FS, str, "max-fs"); APPEND_IF_NONZERO(attr->MAX_FS, str, "max-fs");
APPEND_IF_NONZERO(attr->MAX_CPB, str, "max-cpb"); 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 (attr->PROFILE_IDC && attr->PROFILE_IOP && attr->LEVEL) {
if (added) { if (added) {
ast_str_append(str, 0, ";"); ast_str_append(str, 0, ";");
} else { } else if (0 < ast_str_append(str, 0, "a=fmtp:%u ", payload)) {
added = 1; added = 1;
} }
ast_str_append(str, 0, "profile-level-id=%02X%02X%02X", attr->PROFILE_IDC, attr->PROFILE_IOP, attr->LEVEL); 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 (!ast_strlen_zero(attr->SPS) && !ast_strlen_zero(attr->PPS)) {
if (added) { if (added) {
ast_str_append(str, 0, ";"); ast_str_append(str, 0, ";");
} else { } else if (0 < ast_str_append(str, 0, "a=fmtp:%u ", payload)) {
added = 1; 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) { if (added) {
ast_str_reset(*str);
} else {
ast_str_append(str, 0, "\r\n"); ast_str_append(str, 0, "\r\n");
} }

Loading…
Cancel
Save