mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-12 15:45:18 +00:00
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
This commit is contained in:
@@ -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 */
|
||||
|
Reference in New Issue
Block a user