提交 d5042f2c authored 作者: Marc Olivier Chouinard's avatar Marc Olivier Chouinard

FS-3069 --resolve

上级 904721e4
...@@ -1402,6 +1402,9 @@ SMBF_READ_REPLACE - Replace the Read Stream ...@@ -1402,6 +1402,9 @@ SMBF_READ_REPLACE - Replace the Read Stream
SMBF_STEREO - Record in stereo SMBF_STEREO - Record in stereo
SMBF_ANSWER_RECORD_REQ - Don't record until the channel is answered SMBF_ANSWER_RECORD_REQ - Don't record until the channel is answered
SMBF_THREAD_LOCK - Only let the same thread who created the bug remove it. SMBF_THREAD_LOCK - Only let the same thread who created the bug remove it.
SMBF_PRUNE -
SMBF_NO_PAUSE -
SMBF_STEREO_SWAP - Record in stereo: Write Stream - left channel, Read Stream - right channel
</pre> </pre>
*/ */
typedef enum { typedef enum {
...@@ -1415,7 +1418,8 @@ typedef enum { ...@@ -1415,7 +1418,8 @@ typedef enum {
SMBF_ANSWER_REQ = (1 << 6), SMBF_ANSWER_REQ = (1 << 6),
SMBF_THREAD_LOCK = (1 << 7), SMBF_THREAD_LOCK = (1 << 7),
SMBF_PRUNE = (1 << 8), SMBF_PRUNE = (1 << 8),
SMBF_NO_PAUSE = (1 << 9) SMBF_NO_PAUSE = (1 << 9),
SMBF_STEREO_SWAP = (1 << 10)
} switch_media_bug_flag_enum_t; } switch_media_bug_flag_enum_t;
typedef uint32_t switch_media_bug_flag_t; typedef uint32_t switch_media_bug_flag_t;
......
...@@ -207,14 +207,27 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_bug_read(switch_media_bug_t *b ...@@ -207,14 +207,27 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_bug_read(switch_media_bug_t *b
} }
if (switch_test_flag(bug, SMBF_STEREO)) { if (switch_test_flag(bug, SMBF_STEREO)) {
int16_t *left, *right;
size_t left_len, right_len;
if (switch_test_flag(bug, SMBF_STEREO_SWAP)) {
left = dp; /* write stream */
left_len = wlen;
right = fp; /* read stream */
right_len = rlen;
} else {
left = fp; /* read stream */
left_len = rlen;
right = dp; /* write stream */
right_len = wlen;
}
for (x = 0; x < blen; x++) { for (x = 0; x < blen; x++) {
if (x < rlen) { if (x < left_len) {
*(tp++) = *(fp + x); *(tp++) = *(left + x);
} else { } else {
*(tp++) = 0; *(tp++) = 0;
} }
if (x < wlen) { if (x < right_len) {
*(tp++) = *(dp + x); *(tp++) = *(right + x);
} else { } else {
*(tp++) = 0; *(tp++) = 0;
} }
......
...@@ -1589,6 +1589,13 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_record_session(switch_core_session_t ...@@ -1589,6 +1589,13 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_record_session(switch_core_session_t
if ((p = switch_channel_get_variable(channel, "RECORD_STEREO")) && switch_true(p)) { if ((p = switch_channel_get_variable(channel, "RECORD_STEREO")) && switch_true(p)) {
flags |= SMBF_STEREO; flags |= SMBF_STEREO;
flags &= ~SMBF_STEREO_SWAP;
channels = 2;
}
if ((p = switch_channel_get_variable(channel, "RECORD_STEREO_SWAP")) && switch_true(p)) {
flags |= SMBF_STEREO;
flags |= SMBF_STEREO_SWAP;
channels = 2; channels = 2;
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论