|
|
|
@ -1927,11 +1927,11 @@ static void kernelize(struct packet_stream *stream) { |
|
|
|
|
|
|
|
LOCK(&stream->lock); |
|
|
|
|
|
|
|
if (stream->selected_sfd) { |
|
|
|
if (stream->selected_sfd->kernelized) |
|
|
|
return; |
|
|
|
stream->selected_sfd->kernelized = true; |
|
|
|
} |
|
|
|
if (!stream->selected_sfd) |
|
|
|
goto no_kernel; |
|
|
|
|
|
|
|
if (stream->selected_sfd->kernelized) |
|
|
|
return; |
|
|
|
|
|
|
|
if (call->recording != NULL && !selected_recording_method->kernel_support) |
|
|
|
goto no_kernel; |
|
|
|
@ -1941,8 +1941,6 @@ static void kernelize(struct packet_stream *stream) { |
|
|
|
goto no_kernel_warn; |
|
|
|
if (MEDIA_ISSET(media, GENERATOR)) |
|
|
|
goto no_kernel; |
|
|
|
if (!stream->selected_sfd) |
|
|
|
goto no_kernel; |
|
|
|
if (ML_ISSET(media->monologue, BLOCK_MEDIA) || CALL_ISSET(call, BLOCK_MEDIA)) |
|
|
|
goto no_kernel; |
|
|
|
if (!stream->endpoint.address.family) |
|
|
|
@ -1967,14 +1965,14 @@ static void kernelize(struct packet_stream *stream) { |
|
|
|
continue; |
|
|
|
bool ok = kernelize_one_sink_handler(&s, stream, sh, false); |
|
|
|
if (!ok) |
|
|
|
continue; // retry |
|
|
|
goto retry; |
|
|
|
} |
|
|
|
// RTP egress mirrors |
|
|
|
for (__auto_type l = s.rtp_mirrors[mi]->head; l; l = l->next) { |
|
|
|
struct sink_handler *sh = l->data; |
|
|
|
bool ok = kernelize_one_sink_handler(&s, stream, sh, false); |
|
|
|
if (!ok) |
|
|
|
continue; // retry |
|
|
|
goto retry; |
|
|
|
} |
|
|
|
// RTP -> RTCP sinks |
|
|
|
// record number of RTP destinations up to now |
|
|
|
@ -1986,7 +1984,7 @@ static void kernelize(struct packet_stream *stream) { |
|
|
|
struct sink_handler *sh = l->data; |
|
|
|
bool ok = kernelize_one_sink_handler(&s, stream, sh, true); |
|
|
|
if (!ok) |
|
|
|
continue; // retry |
|
|
|
goto retry; |
|
|
|
} |
|
|
|
// mark the end of RTCP outputs |
|
|
|
s.reti.media_output_idxs[mi].rtcp_end_idx = s.reti.num_destinations; |
|
|
|
@ -2006,6 +2004,8 @@ static void kernelize(struct packet_stream *stream) { |
|
|
|
} |
|
|
|
|
|
|
|
stream->kernel_time_us = rtpe_now; |
|
|
|
stream->selected_sfd->kernelized = true; |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
no_kernel_warn: |
|
|
|
@ -2016,6 +2016,7 @@ no_kernel: |
|
|
|
PS_SET(stream, NO_KERNEL_SUPPORT); |
|
|
|
return; |
|
|
|
|
|
|
|
retry:; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|