|
|
|
@ -75,11 +75,13 @@ static void __init(void) { |
|
|
|
flags.codec_except = str_case_ht_new(); |
|
|
|
flags.codec_set = str_case_value_ht_new(); |
|
|
|
} |
|
|
|
static struct packet_stream *ps_new(call_t *c) { |
|
|
|
static struct packet_stream *ps_new(struct call_media *m) { |
|
|
|
struct packet_stream *ps = malloc(sizeof(*ps)); |
|
|
|
assert(ps != NULL); |
|
|
|
memset(ps, 0, sizeof(*ps)); |
|
|
|
ps->endpoint.port = 12345; |
|
|
|
ps->media = m; |
|
|
|
ps->call = m->call; |
|
|
|
return ps; |
|
|
|
} |
|
|
|
static void __start(const char *file, int line) { |
|
|
|
@ -98,8 +100,8 @@ static void __start(const char *file, int line) { |
|
|
|
ml_B = __monologue_create(&call); |
|
|
|
media_A = call_media_new(&call); // originator |
|
|
|
media_B = call_media_new(&call); // output destination |
|
|
|
t_queue_push_tail(&media_A->streams, ps_new(&call)); |
|
|
|
t_queue_push_tail(&media_B->streams, ps_new(&call)); |
|
|
|
t_queue_push_tail(&media_A->streams, ps_new(media_A)); |
|
|
|
t_queue_push_tail(&media_B->streams, ps_new(media_B)); |
|
|
|
ml_A->tag = STR("tag_A"); |
|
|
|
ml_A->label = STR("label_A"); |
|
|
|
media_A->monologue = ml_A; |
|
|
|
@ -264,7 +266,9 @@ static void __packet_seq_ts(const char *file, int line, struct call_media *media |
|
|
|
.media_out = other_media, |
|
|
|
.ssrc_in = get_ssrc(ssrc, &media->ssrc_hash_in), |
|
|
|
.sfd = &sfd, |
|
|
|
.sink = { .sink = other_media->streams.head->data }, |
|
|
|
}; |
|
|
|
determine_sink_handler(media->streams.head->data, &mp.sink); |
|
|
|
// from __stream_ssrc() |
|
|
|
if (!MEDIA_ISSET(media, TRANSCODING)) |
|
|
|
mp.ssrc_in->ssrc_map_out = ntohl(ssrc); |
|
|
|
|