]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
media formats: update res_format_attr_opus & silk
authorSean Bright <sean@malleable.com>
Wed, 28 Jan 2015 12:19:28 +0000 (12:19 +0000)
committerSean Bright <sean@malleable.com>
Wed, 28 Jan 2015 12:19:28 +0000 (12:19 +0000)
In r419044, we changed how formats were handled, but the return value
of the format_parse_sdp_fmtp functions in res_format_attr_opus and
res_format_attr_silk were not updated, causing calls to fail.  Ran
into this when getting codec_opus working with Asterisk 13.

Once the return value was corrected, we were crashing in opus_getjoint
because of NULL format attributes.  I've fixed this as well in this
patch.

Review: https://reviewboard.asterisk.org/r/4371/
........

Merged revisions 431267 from http://svn.asterisk.org/svn/asterisk/branches/13

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431268 65c4cc65-6c06-0410-ace0-fbb531ad65f3

res/res_format_attr_opus.c
res/res_format_attr_silk.c

index 3de1af38652854ddb15ec787195ba88006368567..7748ecc92a41f86ac6785a1e74fbc4164ce5d98a 100644 (file)
@@ -51,6 +51,12 @@ struct opus_attr {
        unsigned int spropstereo;               /* Default 0 */
 };
 
+static struct opus_attr default_opus_attr = {
+       .fec    = 0,
+       .dtx    = 0,
+       .stereo = 0,
+};
+
 static void opus_destroy(struct ast_format *format)
 {
        struct opus_attr *attr = ast_format_get_attribute_data(format);
@@ -120,7 +126,7 @@ static struct ast_format *opus_parse_sdp_fmtp(const struct ast_format *format, c
                attr->dtx = val;
        }
 
-       return 0;
+       return cloned;
 }
 
 static void opus_generate_sdp_fmtp(const struct ast_format *format, unsigned int payload, struct ast_str **str)
@@ -163,6 +169,14 @@ static struct ast_format *opus_getjoint(const struct ast_format *format1, const
        struct ast_format *jointformat;
        struct opus_attr *attr_res;
 
+       if (!attr1) {
+               attr1 = &default_opus_attr;
+       }
+
+       if (!attr2) {
+               attr2 = &default_opus_attr;
+       }
+
        jointformat = ast_format_clone(format1);
        if (!jointformat) {
                return NULL;
index 365cacc428a079cae5878b31f80256e08e33e398..3a8ca60d2dcc6aa65396c6e9b9064311b4ea92cb 100644 (file)
@@ -94,7 +94,7 @@ static struct ast_format *silk_parse_sdp_fmtp(const struct ast_format *format, c
                attr->fec = val;
        }
 
-       return 0;
+       return cloned;
 }
 
 static void silk_generate_sdp_fmtp(const struct ast_format *format, unsigned int payload, struct ast_str **str)