]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
app_record: Add option to prevent silence from being truncated 44/4944/1
authorSean Bright <sean.bright@gmail.com>
Tue, 14 Feb 2017 14:12:31 +0000 (09:12 -0500)
committerSean Bright <sean.bright@gmail.com>
Tue, 14 Feb 2017 14:28:10 +0000 (09:28 -0500)
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

CHANGES
apps/app_record.c

diff --git a/CHANGES b/CHANGES
index be5848809c2f9bca45a429b997bc7a72a94b6d30..0fe21f77bcc7bc22c4080987f5e8ad4a472e4924 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -8,6 +8,15 @@
 ===
 ==============================================================================
 
+------------------------------------------------------------------------------
+--- 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 ------------
 ------------------------------------------------------------------------------
index fcd89387607f69a952d761798cd9f5c21c225a5a..cc5c1875cfbb9a18d8f7ee881c75718174091eae 100644 (file)
@@ -81,6 +81,9 @@ ASTERISK_REGISTER_FILE()
                                        <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>
@@ -133,6 +136,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,{
@@ -143,6 +147,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),
 });
@@ -194,6 +199,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 = '#';
@@ -245,7 +251,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 */
@@ -445,7 +454,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) {