]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
audiohook.c: Lost RTP packets lead to out-of-sync MixMonitor.
authorAaron An <anjb@ti-net.com.cn>
Wed, 15 Mar 2017 04:49:12 +0000 (12:49 +0800)
committerKevin Harwell <kharwell@digium.com>
Mon, 20 Mar 2017 19:02:35 +0000 (13:02 -0600)
Fixed a bug in function "ast_audiohook_write_frame" that checked the
variable other_factory_samples and only flushed the factories, so they
would be in sync, when other_factory_samples > 0. When there is not any
rtp incoming the variable other_factory_samples will be 0, and although
the result of "our_factory_ms - other_factory_ms" may be very large,
this led to the record file not syncing.

ASTERISK-26875 #close
Reported-by: Aaron An
Tested-by: Aaron An
Change-Id: Ia4d890fb8fc1636a7188502bab35f555685aea22

main/audiohook.c

index 62c090eed0627932cf1a166464cb12379645c301..6340b238dbf3e1f54b5af8c4547b292c9121eb24 100644 (file)
@@ -187,7 +187,7 @@ int ast_audiohook_write_frame(struct ast_audiohook *audiohook, enum ast_audiohoo
        other_factory_samples = ast_slinfactory_available(other_factory);
        other_factory_ms = other_factory_samples / (audiohook->hook_internal_samp_rate / 1000);
 
-       if (ast_test_flag(audiohook, AST_AUDIOHOOK_TRIGGER_SYNC) && other_factory_samples && (our_factory_ms - other_factory_ms > AST_AUDIOHOOK_SYNC_TOLERANCE)) {
+       if (ast_test_flag(audiohook, AST_AUDIOHOOK_TRIGGER_SYNC) && (our_factory_ms - other_factory_ms > AST_AUDIOHOOK_SYNC_TOLERANCE)) {
                ast_debug(1, "Flushing audiohook %p so it remains in sync\n", audiohook);
                ast_slinfactory_flush(factory);
                ast_slinfactory_flush(other_factory);