diff options
Diffstat (limited to 'main/rtp_engine.c')
-rw-r--r-- | main/rtp_engine.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/main/rtp_engine.c b/main/rtp_engine.c index a674cabab..7010c1c0c 100644 --- a/main/rtp_engine.c +++ b/main/rtp_engine.c @@ -1460,6 +1460,7 @@ enum ast_bridge_result ast_rtp_instance_bridge(struct ast_channel *c0, struct as struct ast_format_cap *cap0 = ast_format_cap_alloc_nolock(); struct ast_format_cap *cap1 = ast_format_cap_alloc_nolock(); int unlock_chans = 1; + int read_ptime0, read_ptime1, write_ptime0, write_ptime1; if (!cap0 || !cap1) { unlock_chans = 0; @@ -1567,6 +1568,18 @@ enum ast_bridge_result ast_rtp_instance_bridge(struct ast_channel *c0, struct as goto done; } + read_ptime0 = (ast_codec_pref_getsize(&instance0->codecs.pref, ast_channel_rawreadformat(c0))).cur_ms; + read_ptime1 = (ast_codec_pref_getsize(&instance1->codecs.pref, ast_channel_rawreadformat(c1))).cur_ms; + write_ptime0 = (ast_codec_pref_getsize(&instance0->codecs.pref, ast_channel_rawwriteformat(c0))).cur_ms; + write_ptime1 = (ast_codec_pref_getsize(&instance1->codecs.pref, ast_channel_rawwriteformat(c1))).cur_ms; + + if (read_ptime0 != write_ptime1 || read_ptime1 != write_ptime0) { + ast_debug(1, "Packetization differs between RTP streams (%d != %d or %d != %d). Cannot native bridge in RTP\n", + read_ptime0, write_ptime1, read_ptime1, write_ptime0); + res = AST_BRIDGE_FAILED_NOWARN; + goto done; + } + instance0->glue = glue0; instance1->glue = glue1; instance0->chan = c0; |