summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Bright <sean.bright@gmail.com>2017-02-14 09:12:31 -0500
committerSean Bright <sean.bright@gmail.com>2017-02-14 09:35:18 -0500
commit662c9e69fa021887146b887e06cd99cac568701d (patch)
treefc073bd3de76412ae75421b9ee87cc56ad973127
parent72845bd4b56bc18a0eefe2c3cb9c4a2f6117f460 (diff)
app_record: Add option to prevent silence from being truncated
When using Record() with the silence detection feature, the stream is written out to the given file. However, if only 'silence' is detected, this file is then truncated to the first second of the recording. This patch adds the 'u' option to Record() to override that behavior. ASTERISK-18286 #close Reported by: var Patches: app_record-1.8.7.1.diff (license #6184) patch uploaded by var Change-Id: Ia1cd163483235efe2db05e52f39054288553b957
-rw-r--r--CHANGES9
-rw-r--r--apps/app_record.c13
2 files changed, 20 insertions, 2 deletions
diff --git a/CHANGES b/CHANGES
index 1671d3635..79a1840b0 100644
--- a/CHANGES
+++ b/CHANGES
@@ -80,6 +80,15 @@ app_queue
using app_queue.
------------------------------------------------------------------------------
+--- Functionality changes from Asterisk 14.3.0 to Asterisk 14.4.0 ------------
+------------------------------------------------------------------------------
+
+app_record
+------------------
+ * Added new 'u' option to Record() application which prevents Asterisk from
+ truncating silence from the end of recorded files.
+
+------------------------------------------------------------------------------
--- Functionality changes from Asterisk 14.2.0 to Asterisk 14.3.0 ------------
------------------------------------------------------------------------------
diff --git a/apps/app_record.c b/apps/app_record.c
index ede50be26..0b85ff8a6 100644
--- a/apps/app_record.c
+++ b/apps/app_record.c
@@ -79,6 +79,9 @@
<option name="t">
<para>use alternate '*' terminator key (DTMF) instead of default '#'</para>
</option>
+ <option name="u">
+ <para>Don't truncate recorded silence.</para>
+ </option>
<option name="x">
<para>Ignore all terminator keys (DTMF) and keep recording until hangup.</para>
</option>
@@ -131,6 +134,7 @@ enum {
FLAG_HAS_PERCENT = (1 << 7),
OPTION_ANY_TERMINATE = (1 << 8),
OPTION_OPERATOR_EXIT = (1 << 9),
+ OPTION_NO_TRUNCATE = (1 << 10),
};
AST_APP_OPTIONS(app_opts,{
@@ -141,6 +145,7 @@ AST_APP_OPTIONS(app_opts,{
AST_APP_OPTION('q', OPTION_QUIET),
AST_APP_OPTION('s', OPTION_SKIP),
AST_APP_OPTION('t', OPTION_STAR_TERMINATE),
+ AST_APP_OPTION('u', OPTION_NO_TRUNCATE),
AST_APP_OPTION('y', OPTION_ANY_TERMINATE),
AST_APP_OPTION('x', OPTION_IGNORE_TERMINATE),
});
@@ -192,6 +197,7 @@ static int record_exec(struct ast_channel *chan, const char *data)
int dspsilence = 0;
int silence = 0; /* amount of silence to allow */
int gotsilence = 0; /* did we timeout for silence? */
+ int truncate_silence = 1; /* truncate on complete silence recording */
int maxduration = 0; /* max duration of recording in milliseconds */
int gottimeout = 0; /* did we timeout for maxduration exceeded? */
int terminator = '#';
@@ -243,7 +249,10 @@ static int record_exec(struct ast_channel *chan, const char *data)
ast_log(LOG_WARNING, "'%s' is not a valid silence duration\n", args.silence);
}
}
-
+
+ if (ast_test_flag(&flags, OPTION_NO_TRUNCATE))
+ truncate_silence = 0;
+
if (args.maxduration) {
if ((sscanf(args.maxduration, "%30d", &i) == 1) && (i > -1))
/* Convert duration to milliseconds */
@@ -443,7 +452,7 @@ static int record_exec(struct ast_channel *chan, const char *data)
}
}
- if (gotsilence) {
+ if (gotsilence && truncate_silence) {
ast_stream_rewind(s, silence - 1000);
ast_truncstream(s);
} else if (!gottimeout && f) {