SMBF_STEREO - Record in stereo
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_PRUNE -
+SMBF_NO_PAUSE -
+SMBF_STEREO_SWAP - Record in stereo: Write Stream - left channel, Read Stream - right channel
</pre>
*/
typedef enum {
SMBF_ANSWER_REQ = (1 << 6),
SMBF_THREAD_LOCK = (1 << 7),
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;
typedef uint32_t switch_media_bug_flag_t;
}
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++) {
- if (x < rlen) {
- *(tp++) = *(fp + x);
+ if (x < left_len) {
+ *(tp++) = *(left + x);
} else {
*(tp++) = 0;
}
- if (x < wlen) {
- *(tp++) = *(dp + x);
+ if (x < right_len) {
+ *(tp++) = *(right + x);
} else {
*(tp++) = 0;
}
if ((p = switch_channel_get_variable(channel, "RECORD_STEREO")) && switch_true(p)) {
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;
}