]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
res_rtp_asterisk: Swap byte-order when sending signed linear 43/4843/7
authorSean Bright <sean.bright@gmail.com>
Mon, 30 Jan 2017 15:02:14 +0000 (10:02 -0500)
committerSean Bright <sean.bright@gmail.com>
Wed, 1 Feb 2017 15:35:44 +0000 (10:35 -0500)
Before Asterisk 13, signed linear was converted into network byte order by a
smoother before being sent over the network. We restore this behavior by
forcing the creation of a smoother when slinear is in use and setting the
appropriate flags so that the byte order conversion is always done.

ASTERISK-24858 #close
Reported-by: Frankie Chin
Change-Id: I868449617d1a7819578f218c8c6b2111ad84f5a9

res/res_rtp_asterisk.c

index 43d0ae20a2d75a1ab47c69e36882306521b64233..ba2d815505a6e9ca6fa9403be4f192984267d406 100644 (file)
@@ -3634,6 +3634,11 @@ static int ast_rtp_write(struct ast_rtp_instance *instance, struct ast_frame *fr
        /* If no smoother is present see if we have to set one up */
        if (!rtp->smoother && ast_format_can_be_smoothed(format)) {
                unsigned int framing_ms = ast_rtp_codecs_get_framing(ast_rtp_instance_get_codecs(instance));
+               int is_slinear = ast_format_cache_is_slinear(format);
+
+               if (!framing_ms && is_slinear) {
+                       framing_ms = ast_format_get_default_ms(format);
+               }
 
                if (framing_ms) {
                        rtp->smoother = ast_smoother_new((framing_ms * ast_format_get_minimum_bytes(format)) / ast_format_get_minimum_ms(format));
@@ -3642,6 +3647,9 @@ static int ast_rtp_write(struct ast_rtp_instance *instance, struct ast_frame *fr
                                        ast_format_get_name(format), framing_ms, ast_format_get_minimum_bytes(format));
                                return -1;
                        }
+                       if (is_slinear) {
+                               ast_smoother_set_flags(rtp->smoother, AST_SMOOTHER_FLAG_BE);
+                       }
                }
        }