From bb374732342b32c68bd8b78e52b67c0038215c58 Mon Sep 17 00:00:00 2001
From: Richard Mudgett <rmudgett@digium.com>
Date: Thu, 13 Aug 2015 12:22:14 -0500
Subject: [PATCH] audiohook.c: Fix MixMonitor crash when using the r() or t()
 options.

The built frame format in audiohook_read_frame_both() is now set to a
signed linear format before the rx and tx frames are duplicated instead of
only for the mixed audio frame duplication.

ASTERISK-25322 #close
Reported by Sean Pimental

Change-Id: I86f85b5c48c49e4e2d3b770797b9d484250a1538
---
 main/audiohook.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/main/audiohook.c b/main/audiohook.c
index ba1ecd4fd4..ba7219354d 100644
--- a/main/audiohook.c
+++ b/main/audiohook.c
@@ -326,6 +326,8 @@ static struct ast_frame *audiohook_read_frame_both(struct ast_audiohook *audioho
 		ast_debug(1, "Failed to get %d samples from write factory %p\n", (int)samples, &audiohook->write_factory);
 	}
 
+	frame.subclass.format = ast_format_cache_get_slin_by_rate(audiohook->hook_internal_samp_rate);
+
 	/* Basically we figure out which buffer to use... and if mixing can be done here */
 	if (read_buf && read_reference) {
 		frame.data.ptr = buf1;
@@ -352,8 +354,6 @@ static struct ast_frame *audiohook_read_frame_both(struct ast_audiohook *audioho
 	/* Make the final buffer part of the frame, so it gets duplicated fine */
 	frame.data.ptr = final_buf;
 
-	frame.subclass.format = ast_format_cache_get_slin_by_rate(audiohook->hook_internal_samp_rate);
-
 	/* Yahoo, a combined copy of the audio! */
 	return ast_frdup(&frame);
 }
-- 
GitLab