81{
82 int res = 0;
85 int notsilent = 0;
86 struct timeval start = { 0, 0 };
87 struct timeval detection_start = { 0, 0 };
88 int sil = 1000;
91 int analysistime = -1;
92 int continue_analysis = 1;
93 int x;
102 );
103
106 return -1;
107 }
108
111
113 sil = x;
114 }
117 }
120 }
122 analysistime = x;
123 }
124
125 ast_debug(1,
"Preparing detect of '%s', sil=%d, min=%d, max=%d, analysistime=%d\n",
args.filename, sil,
min,
max, analysistime);
126 do {
129 break;
130 }
131 }
132
136 res = -1;
137 break;
138 }
139
142 res = -1;
143 break;
144 }
148 break;
149 }
154 res = 0;
155 break;
156 }
157 if (res < 0) {
158 res = 1000;
159 }
161 if (res < 0) {
163 break;
164 } else if (res > 0) {
166 if (continue_analysis && analysistime >= 0) {
167
168
170 continue_analysis = 0;
172 }
173 }
174
175 if (!fr) {
176 res = -1;
177 break;
179 char t[2];
181 t[1] = '\0';
184
187 break;
188 }
192 int ms;
195
196 if (notsilent) {
197
199 ms -= sil;
200 if (ms < 0)
201 ms = 0;
202 if ((ms >
min) && ((
max < 0) || (ms <
max))) {
203 char ms_str[12];
204 ast_debug(1,
"Found qualified token of %d ms\n", ms);
205
206
207 snprintf(ms_str, sizeof(ms_str), "%d", ms);
209
211 res = 0;
213 break;
214 } else {
215 ast_debug(1,
"Found unqualified token of %d ms\n", ms);
216 }
217 notsilent = 0;
218 }
219 } else {
220 if (!notsilent) {
221
224 notsilent = 1;
225 }
226 }
227 }
229 }
231 }
233 } while (0);
234
235 if (res > -1) {
239 }
240 }
241 if (dsp) {
243 }
244 return res;
245}
#define ast_strdupa(s)
duplicate a string in memory from the stack
#define ao2_bump(obj)
Bump refcount on an AO2 object by one, returning the object.
const char * ast_channel_name(const struct ast_channel *chan)
int ast_waitfor(struct ast_channel *chan, int ms)
Wait for input on a channel.
const char * ast_channel_context(const struct ast_channel *chan)
struct ast_frame * ast_read(struct ast_channel *chan)
Reads a frame.
int ast_set_read_format(struct ast_channel *chan, struct ast_format *format)
Sets read format on channel chan.
ast_timing_func_t ast_channel_timingfunc(const struct ast_channel *chan)
const char * ast_channel_language(const struct ast_channel *chan)
struct ast_sched_context * ast_channel_sched(const struct ast_channel *chan)
struct ast_filestream * ast_channel_stream(const struct ast_channel *chan)
struct ast_party_caller * ast_channel_caller(struct ast_channel *chan)
int ast_answer(struct ast_channel *chan)
Answer a channel.
struct ast_format * ast_channel_readformat(struct ast_channel *chan)
ast_channel_state
ast_channel states
void ast_dsp_free(struct ast_dsp *dsp)
int ast_dsp_silence(struct ast_dsp *dsp, struct ast_frame *f, int *totalsilence)
Process the audio frame for silence.
struct ast_dsp * ast_dsp_new(void)
Allocates a new dsp, assumes 8khz for internal sample rate.
int ast_stopstream(struct ast_channel *c)
Stops a stream.
int ast_streamfile(struct ast_channel *c, const char *filename, const char *preflang)
Streams a file.
#define AST_APP_ARG(name)
Define an application argument.
#define AST_DECLARE_APP_ARGS(name, arglist)
Declare a structure to hold an application's arguments.
#define AST_STANDARD_APP_ARGS(args, parse)
Performs the 'standard' argument separation process for an application.
#define ast_debug(level,...)
Log a DEBUG message.
#define ast_verb(level,...)
int pbx_builtin_setvar_helper(struct ast_channel *chan, const char *name, const char *value)
Add a variable to the channel variable stack, removing the most recently set value for the same name.
int ast_goto_if_exists(struct ast_channel *chan, const char *context, const char *exten, int priority)
int ast_canmatch_extension(struct ast_channel *c, const char *context, const char *exten, int priority, const char *callerid)
Looks for a valid matching extension.
int ast_sched_runq(struct ast_sched_context *con)
Runs the queue.
int ast_sched_wait(struct ast_sched_context *con) attribute_warn_unused_result
Determines number of seconds until the next outstanding event to take place.
#define S_COR(a, b, c)
returns the equivalent of logic or for strings, with an additional boolean check: second one if not e...
static force_inline int attribute_pure ast_strlen_zero(const char *s)
struct ast_format * format
Data structure associated with a single frame of data.
struct ast_frame_subclass subclass
enum ast_frame_type frametype
int64_t ast_tvdiff_ms(struct timeval end, struct timeval start)
Computes the difference (in milliseconds) between two struct timeval instances.
struct timeval ast_tvnow(void)
Returns current timeval. Meant to replace calls to gettimeofday().
#define RAII_VAR(vartype, varname, initval, dtor)
Declare a variable that will call a destructor function when it goes out of scope.