diff options
author | Jean Aunis <jean.aunis@prescom.fr> | 2016-04-01 14:50:30 +0200 |
---|---|---|
committer | Jean Aunis <jean.aunis@prescom.fr> | 2016-04-27 15:39:59 +0200 |
commit | 72817707104f1d564c75be5ecd9aa0ce01f38589 (patch) | |
tree | 7c32d7013705f8af4a188de93beebe00a60ddf66 /main | |
parent | 8ae69cffef03dcd4ba8a2ef56299ea3d19546a34 (diff) |
app_chanspy: reduce audio loss on the spying channel.
ChanSpy was creating its audiohook with the flags AST_AUDIOHOOK_TRIGGER_SYNC
and AST_AUDIOHOOK_SMALL_QUEUE, which caused audio frames to be lost when
queues grow too large or when read and write queues go out of sync.
Now these flags are set conditionally:
- AST_AUDIOHOOK_TRIGGER_SYNC is not set if the option "o" is set
- a new option "l" is created: if set, AST_AUDIOHOOK_SMALL_QUEUE will not
be set on the audiohook
ASTERISK-25866
Change-Id: I9c7652f41d9fa72c8691e4e70ec4fd16b047a4dd
Diffstat (limited to 'main')
-rw-r--r-- | main/audiohook.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/main/audiohook.c b/main/audiohook.c index e3089131e..4a73fbd52 100644 --- a/main/audiohook.c +++ b/main/audiohook.c @@ -45,6 +45,7 @@ ASTERISK_REGISTER_FILE() #define AST_AUDIOHOOK_SYNC_TOLERANCE 100 /*!< Tolerance in milliseconds for audiohooks synchronization */ #define AST_AUDIOHOOK_SMALL_QUEUE_TOLERANCE 100 /*!< When small queue is enabled, this is the maximum amount of audio that can remain queued at a time. */ +#define AST_AUDIOHOOK_LONG_QUEUE_TOLERANCE 500 /*!< Otheriwise we still don't want the queue to grow indefinitely */ #define DEFAULT_INTERNAL_SAMPLE_RATE 8000 @@ -192,6 +193,10 @@ int ast_audiohook_write_frame(struct ast_audiohook *audiohook, enum ast_audiohoo ast_debug(1, "Audiohook %p has stale audio in its factories. Flushing them both\n", audiohook); ast_slinfactory_flush(factory); ast_slinfactory_flush(other_factory); + } else if ((our_factory_ms > AST_AUDIOHOOK_LONG_QUEUE_TOLERANCE) || (other_factory_ms > AST_AUDIOHOOK_LONG_QUEUE_TOLERANCE)) { + ast_debug(1, "Audiohook %p has stale audio in its factories. Flushing them both\n", audiohook); + ast_slinfactory_flush(factory); + ast_slinfactory_flush(other_factory); } /* swap frame data for zeros if mute is required */ |