mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-10 03:48:34 +00:00
Merge "res_stasis_snoop: Spying on a single direction continually increases CPU"
This commit is contained in:
@@ -177,11 +177,27 @@ static struct ast_frame *snoop_read(struct ast_channel *chan)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Only get audio from the spy audiohook if it is active */
|
/* Only get audio from the spy audiohook if it is active */
|
||||||
if (snoop->spy_active) {
|
if (!snoop->spy_active) {
|
||||||
|
return &ast_null_frame;
|
||||||
|
}
|
||||||
|
|
||||||
ast_audiohook_lock(&snoop->spy);
|
ast_audiohook_lock(&snoop->spy);
|
||||||
|
if (snoop->spy_direction != AST_AUDIOHOOK_DIRECTION_BOTH) {
|
||||||
|
/*
|
||||||
|
* When a singular direction is chosen frames are still written to the
|
||||||
|
* opposing direction's queue. Those frames must be read so the queue
|
||||||
|
* does not continue to grow, however since they are not needed for the
|
||||||
|
* selected direction they can be dropped.
|
||||||
|
*/
|
||||||
|
enum ast_audiohook_direction opposing_direction =
|
||||||
|
snoop->spy_direction == AST_AUDIOHOOK_DIRECTION_READ ?
|
||||||
|
AST_AUDIOHOOK_DIRECTION_WRITE : AST_AUDIOHOOK_DIRECTION_READ;
|
||||||
|
ast_frame_dtor(ast_audiohook_read_frame(&snoop->spy, snoop->spy_samples,
|
||||||
|
opposing_direction, snoop->spy_format));
|
||||||
|
}
|
||||||
|
|
||||||
frame = ast_audiohook_read_frame(&snoop->spy, snoop->spy_samples, snoop->spy_direction, snoop->spy_format);
|
frame = ast_audiohook_read_frame(&snoop->spy, snoop->spy_samples, snoop->spy_direction, snoop->spy_format);
|
||||||
ast_audiohook_unlock(&snoop->spy);
|
ast_audiohook_unlock(&snoop->spy);
|
||||||
}
|
|
||||||
|
|
||||||
return frame ? frame : &ast_null_frame;
|
return frame ? frame : &ast_null_frame;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user