Browse Source

MT#55283 use fancy "named args" syntax

... for codec_handlers_update

Change-Id: Ie53aab9c5c1ab9a3d8e79325757a068c2e446540
pull/1759/head
Richard Fuchs 2 years ago
parent
commit
5c5ad6d830
4 changed files with 42 additions and 36 deletions
  1. +9
    -9
      daemon/call.c
  2. +22
    -22
      daemon/codec.c
  3. +1
    -1
      daemon/redis.c
  4. +10
    -4
      include/codec.h

+ 9
- 9
daemon/call.c View File

@ -2429,13 +2429,13 @@ void codecs_offer_answer(struct call_media *media, struct call_media *other_medi
codec_tracker_update(&media->codecs); codec_tracker_update(&media->codecs);
// set up handlers // set up handlers
codec_handlers_update(media, other_media, flags, sp , NULL);
codec_handlers_update(media, other_media, .flags = flags, .sp = sp);
// updating the handlers may have removed some codecs, so run update the supp codecs again // updating the handlers may have removed some codecs, so run update the supp codecs again
codec_tracker_update(&media->codecs); codec_tracker_update(&media->codecs);
// finally set up handlers again based on final results // finally set up handlers again based on final results
codec_handlers_update(media, other_media, flags, sp, dialogue[1]);
codec_handlers_update(media, other_media, .flags = flags, .sp = sp, .sub = dialogue[1]);
} }
else { else {
// answer // answer
@ -2465,7 +2465,7 @@ void codecs_offer_answer(struct call_media *media, struct call_media *other_medi
// update callee side codec handlers again (second pass after the offer) as we // update callee side codec handlers again (second pass after the offer) as we
// might need to update some handlers, e.g. when supplemental codecs have been // might need to update some handlers, e.g. when supplemental codecs have been
// rejected // rejected
codec_handlers_update(other_media, media, NULL, NULL, NULL);
codec_handlers_update(other_media, media);
// finally set up our caller side codecs // finally set up our caller side codecs
ilogs(codec, LOG_DEBUG, "Codec answer for " STR_FORMAT " #%u", ilogs(codec, LOG_DEBUG, "Codec answer for " STR_FORMAT " #%u",
@ -2474,15 +2474,15 @@ void codecs_offer_answer(struct call_media *media, struct call_media *other_medi
codec_store_answer(&media->codecs, &other_media->codecs, flags); codec_store_answer(&media->codecs, &other_media->codecs, flags);
// set up handlers // set up handlers
codec_handlers_update(media, other_media, flags, sp, NULL);
codec_handlers_update(media, other_media, .flags = flags, .sp = sp);
// updating the handlers may have removed some codecs, so run update the supp codecs again // updating the handlers may have removed some codecs, so run update the supp codecs again
codec_tracker_update(&media->codecs); codec_tracker_update(&media->codecs);
codec_tracker_update(&other_media->codecs); codec_tracker_update(&other_media->codecs);
// finally set up handlers again based on final results // finally set up handlers again based on final results
codec_handlers_update(media, other_media, flags, sp, dialogue[1]);
codec_handlers_update(other_media, media, NULL, NULL, dialogue[0]);
codec_handlers_update(media, other_media, .flags = flags, .sp = sp, .sub = dialogue[1]);
codec_handlers_update(other_media, media, .sub = dialogue[0]);
// activate audio player if needed (not done by codec_handlers_update without `flags`) // activate audio player if needed (not done by codec_handlers_update without `flags`)
audio_player_activate(media); audio_player_activate(media);
@ -3135,7 +3135,7 @@ static int monologue_subscribe_request1(struct call_monologue *src_ml, struct ca
codec_store_transcode(&dst_media->codecs, &flags->codec_transcode, &sp->codecs); codec_store_transcode(&dst_media->codecs, &flags->codec_transcode, &sp->codecs);
codec_store_synthesise(&dst_media->codecs, &src_media->codecs); codec_store_synthesise(&dst_media->codecs, &src_media->codecs);
codec_handlers_update(dst_media, src_media, flags, sp, NULL);
codec_handlers_update(dst_media, src_media, .flags = flags, .sp = sp);
if (!flags->inactive) if (!flags->inactive)
bf_copy(&dst_media->media_flags, MEDIA_FLAG_SEND, &src_media->media_flags, SP_FLAG_RECV); bf_copy(&dst_media->media_flags, MEDIA_FLAG_SEND, &src_media->media_flags, SP_FLAG_RECV);
@ -3251,8 +3251,8 @@ int monologue_subscribe_answer(struct call_monologue *dst_ml, struct sdp_ng_flag
return -1; return -1;
} }
codec_handlers_update(src_media, dst_media, NULL, NULL, NULL);
codec_handlers_update(dst_media, src_media, flags, sp, rev_cs);
codec_handlers_update(src_media, dst_media);
codec_handlers_update(dst_media, src_media, .flags = flags, .sp = sp, .sub = rev_cs);
__dtls_logic(flags, dst_media, sp); __dtls_logic(flags, dst_media, sp);


+ 22
- 22
daemon/codec.c View File

@ -991,15 +991,15 @@ static int __codec_handler_eq(const void *a, const void *b) {
} }
// call must be locked in W // call must be locked in W
void codec_handlers_update(struct call_media *receiver, struct call_media *sink,
const struct sdp_ng_flags *flags, const struct stream_params *sp, struct call_subscription *sub)
void __codec_handlers_update(struct call_media *receiver, struct call_media *sink,
struct chu_args a)
{ {
ilogs(codec, LOG_DEBUG, "Setting up codec handlers for " STR_FORMAT_M " #%u -> " STR_FORMAT_M " #%u", ilogs(codec, LOG_DEBUG, "Setting up codec handlers for " STR_FORMAT_M " #%u -> " STR_FORMAT_M " #%u",
STR_FMT_M(&receiver->monologue->tag), receiver->index, STR_FMT_M(&receiver->monologue->tag), receiver->index,
STR_FMT_M(&sink->monologue->tag), sink->index); STR_FMT_M(&sink->monologue->tag), sink->index);
if (sub)
sub->attrs.transcoding = 0;
if (a.sub)
a.sub->attrs.transcoding = 0;
MEDIA_CLEAR(receiver, GENERATOR); MEDIA_CLEAR(receiver, GENERATOR);
MEDIA_CLEAR(sink, GENERATOR); MEDIA_CLEAR(sink, GENERATOR);
@ -1010,9 +1010,9 @@ void codec_handlers_update(struct call_media *receiver, struct call_media *sink,
// non-RTP protocol? // non-RTP protocol?
if (proto_is(receiver->protocol, PROTO_UDPTL)) { if (proto_is(receiver->protocol, PROTO_UDPTL)) {
if (codec_handler_udptl_update(receiver, sink, flags)) {
if (sub)
sub->attrs.transcoding = 1;
if (codec_handler_udptl_update(receiver, sink, a.flags)) {
if (a.sub)
a.sub->attrs.transcoding = 1;
return; return;
} }
} }
@ -1026,9 +1026,9 @@ void codec_handlers_update(struct call_media *receiver, struct call_media *sink,
// should we transcode to a non-RTP protocol? // should we transcode to a non-RTP protocol?
if (proto_is_not_rtp(sink->protocol)) { if (proto_is_not_rtp(sink->protocol)) {
if (codec_handler_non_rtp_update(receiver, sink, flags, sp)) {
if (sub)
sub->attrs.transcoding = 1;
if (codec_handler_non_rtp_update(receiver, sink, a.flags, a.sp)) {
if (a.sub)
a.sub->attrs.transcoding = 1;
return; return;
} }
} }
@ -1048,15 +1048,15 @@ void codec_handlers_update(struct call_media *receiver, struct call_media *sink,
bool use_audio_player = !!MEDIA_ISSET(sink, AUDIO_PLAYER); bool use_audio_player = !!MEDIA_ISSET(sink, AUDIO_PLAYER);
bool implicit_audio_player = false; bool implicit_audio_player = false;
if (flags && flags->audio_player == AP_FORCE)
if (a.flags && a.flags->audio_player == AP_FORCE)
use_audio_player = true; use_audio_player = true;
else if (flags && flags->audio_player == AP_OFF)
else if (a.flags && a.flags->audio_player == AP_OFF)
use_audio_player = false; use_audio_player = false;
else if (rtpe_config.use_audio_player == UAP_ALWAYS) else if (rtpe_config.use_audio_player == UAP_ALWAYS)
use_audio_player = true; use_audio_player = true;
else if (rtpe_config.use_audio_player == UAP_PLAY_MEDIA) { else if (rtpe_config.use_audio_player == UAP_PLAY_MEDIA) {
// check for implicitly enabled player // check for implicitly enabled player
if ((flags && flags->opmode == OP_PLAY_MEDIA) || (media_player_is_active(sink->monologue))) {
if ((a.flags && a.flags->opmode == OP_PLAY_MEDIA) || (media_player_is_active(sink->monologue))) {
use_audio_player = true; use_audio_player = true;
implicit_audio_player = true; implicit_audio_player = true;
} }
@ -1088,7 +1088,7 @@ void codec_handlers_update(struct call_media *receiver, struct call_media *sink,
if (receiver->monologue->dtmf_trigger.len) if (receiver->monologue->dtmf_trigger.len)
do_dtmf_detect = true; do_dtmf_detect = true;
if (flags && flags->inject_dtmf)
if (a.flags && a.flags->inject_dtmf)
sink->monologue->inject_dtmf = 1; sink->monologue->inject_dtmf = 1;
bool use_ssrc_passthrough = MEDIA_ISSET(receiver, ECHO) || sink->monologue->inject_dtmf; bool use_ssrc_passthrough = MEDIA_ISSET(receiver, ECHO) || sink->monologue->inject_dtmf;
@ -1195,7 +1195,7 @@ sink_pt_fixed:;
// XXX synthesise missing supp codecs according to codec tracker XXX needed? // XXX synthesise missing supp codecs according to codec tracker XXX needed?
if (!flags) {
if (!a.flags) {
// second pass going through the offerer codecs during an answer: // second pass going through the offerer codecs during an answer:
// if an answer rejected a supplemental codec that isn't marked for transcoding, // if an answer rejected a supplemental codec that isn't marked for transcoding,
// reject it on the sink side as well // reject it on the sink side as well
@ -1319,9 +1319,9 @@ sink_pt_fixed:;
transcode: transcode:
// enable audio player if not explicitly disabled // enable audio player if not explicitly disabled
if (rtpe_config.use_audio_player == UAP_TRANSCODING && (!flags || flags->audio_player != AP_OFF))
if (rtpe_config.use_audio_player == UAP_TRANSCODING && (!a.flags || a.flags->audio_player != AP_OFF))
use_audio_player = true; use_audio_player = true;
else if (flags && flags->audio_player == AP_TRANSCODING)
else if (a.flags && a.flags->audio_player == AP_TRANSCODING)
use_audio_player = true; use_audio_player = true;
if (use_audio_player) { if (use_audio_player) {
@ -1377,8 +1377,8 @@ next:
MEDIA_SET(sink, AUDIO_PLAYER); MEDIA_SET(sink, AUDIO_PLAYER);
if (is_transcoding) { if (is_transcoding) {
if (sub)
sub->attrs.transcoding = 1;
if (a.sub)
a.sub->attrs.transcoding = 1;
if (!use_audio_player) { if (!use_audio_player) {
// we have to translate RTCP packets // we have to translate RTCP packets
@ -1427,7 +1427,7 @@ next:
audio_player_setup(sink, pref_dest_codec, rtpe_config.audio_buffer_length, audio_player_setup(sink, pref_dest_codec, rtpe_config.audio_buffer_length,
rtpe_config.audio_buffer_delay); rtpe_config.audio_buffer_delay);
if (flags && (flags->early_media || flags->opmode == OP_ANSWER))
if (a.flags && (a.flags->early_media || a.flags->opmode == OP_ANSWER))
audio_player_activate(sink); audio_player_activate(sink);
} }
} }
@ -4148,7 +4148,7 @@ void codec_update_all_handlers(struct call_monologue *ml) {
struct call_media *sink_media = sink->medias->pdata[i]; struct call_media *sink_media = sink->medias->pdata[i];
if (!sink_media) if (!sink_media)
continue; continue;
codec_handlers_update(source_media, sink_media, NULL, NULL, NULL);
codec_handlers_update(source_media, sink_media);
} }
} }
@ -4168,7 +4168,7 @@ void codec_update_all_source_handlers(struct call_monologue *ml, const struct sd
struct call_media *sink_media = ml->medias->pdata[i]; struct call_media *sink_media = ml->medias->pdata[i];
if (!sink_media) if (!sink_media)
continue; continue;
codec_handlers_update(source_media, sink_media, flags, NULL, NULL);
codec_handlers_update(source_media, sink_media, .flags = flags);
} }
} }


+ 1
- 1
daemon/redis.c View File

@ -1861,7 +1861,7 @@ static int json_link_medias(struct call *c, struct redis_list *medias,
continue; continue;
other_m->monologue = other_ml; other_m->monologue = other_ml;
if (other_m->index == med->index) { if (other_m->index == med->index) {
codec_handlers_update(other_m, med, NULL, NULL, cs);
codec_handlers_update(other_m, med, .sub = cs);
break; break;
} }
} }


+ 10
- 4
include/codec.h View File

@ -168,13 +168,20 @@ void codec_init_payload_type(struct rtp_payload_type *, enum media_type);
void payload_type_clear(struct rtp_payload_type *p); void payload_type_clear(struct rtp_payload_type *p);
struct chu_args {
const struct sdp_ng_flags *flags;
const struct stream_params *sp;
struct call_subscription *sub;
};
#define codec_handlers_update(r, s, ...) \
__codec_handlers_update(r, s, (struct chu_args) {__VA_ARGS__})
#ifdef WITH_TRANSCODING #ifdef WITH_TRANSCODING
void ensure_codec_def(struct rtp_payload_type *pt, struct call_media *media); void ensure_codec_def(struct rtp_payload_type *pt, struct call_media *media);
void codec_handler_free(struct codec_handler **handler); void codec_handler_free(struct codec_handler **handler);
void codec_handlers_update(struct call_media *receiver, struct call_media *sink, const struct sdp_ng_flags *,
const struct stream_params *, struct call_subscription *);
__attribute__((nonnull(1, 2)))
void __codec_handlers_update(struct call_media *receiver, struct call_media *sink, struct chu_args);
void codec_add_dtmf_event(struct codec_ssrc_handler *ch, int code, int level, uint64_t ts, bool injected); void codec_add_dtmf_event(struct codec_ssrc_handler *ch, int code, int level, uint64_t ts, bool injected);
uint64_t codec_last_dtmf_event(struct codec_ssrc_handler *ch); uint64_t codec_last_dtmf_event(struct codec_ssrc_handler *ch);
uint64_t codec_encoder_pts(struct codec_ssrc_handler *ch, struct ssrc_ctx *); uint64_t codec_encoder_pts(struct codec_ssrc_handler *ch, struct ssrc_ctx *);
@ -215,8 +222,7 @@ INLINE struct codec_handler *codec_handler_lookup(GHashTable *ht, int pt, struct
#else #else
INLINE void codec_handlers_update(struct call_media *receiver, struct call_media *sink,
const struct sdp_ng_flags *flags, const struct stream_params *sp, struct call_subscription *sub)
INLINE void __codec_handlers_update(struct call_media *receiver, struct call_media *sink, struct chu_args a)
{ {
} }
INLINE void codec_handler_free(struct codec_handler **handler) { } INLINE void codec_handler_free(struct codec_handler **handler) { }


Loading…
Cancel
Save