From 551b9687d8d1a5c300f3ac330b4116a83249b3fc Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Mon, 27 Feb 2023 09:37:44 -0500 Subject: [PATCH] MT#56471 extend make_transcoder with callback arg Support creating transcoders with different "packet decoded" callback functions. Functional no-op. Change-Id: I49ba720841161999dc0ae166ea0841dc094e8bc7 --- daemon/codec.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/daemon/codec.c b/daemon/codec.c index fbeab302b..3877d00d3 100644 --- a/daemon/codec.c +++ b/daemon/codec.c @@ -298,6 +298,7 @@ static void __handler_shutdown(struct codec_handler *handler) { handler->kernelize = 0; handler->transcoder = 0; handler->output_handler = handler; // reset to default + handler->packet_decoded = packet_decoded_fifo; handler->dtmf_payload_type = -1; handler->real_dtmf_payload_type = -1; handler->cn_payload_type = -1; @@ -404,9 +405,9 @@ static void __reset_sequencer(void *p, void *dummy) { g_hash_table_destroy(s->sequencers); s->sequencers = NULL; } -static void __make_transcoder(struct codec_handler *handler, struct rtp_payload_type *dest, +static void __make_transcoder_full(struct codec_handler *handler, struct rtp_payload_type *dest, GHashTable *output_transcoders, int dtmf_payload_type, bool pcm_dtmf_detect, - int cn_payload_type) + int cn_payload_type, int (*packet_decoded)(decoder_t *, AVFrame *, void *, void *)) { assert(handler->source_pt.codec_def != NULL); @@ -419,6 +420,8 @@ static void __make_transcoder(struct codec_handler *handler, struct rtp_payload_ goto reset; if (handler->handler_func != handler_func_transcode) goto reset; + if (handler->packet_decoded != packet_decoded) + goto reset; if (handler->cn_payload_type != cn_payload_type) goto reset; if (handler->dtmf_payload_type != dtmf_payload_type) @@ -441,6 +444,7 @@ reset: if (dest->codec_def->format_answer) dest->codec_def->format_answer(&handler->dest_pt); handler->handler_func = handler_func_transcode; + handler->packet_decoded = packet_decoded; handler->transcoder = 1; handler->dtmf_payload_type = dtmf_payload_type; handler->cn_payload_type = cn_payload_type; @@ -501,6 +505,13 @@ no_handler_reset: handler->output_handler = handler; // make sure we don't have a stale pointer } } +static void __make_transcoder(struct codec_handler *handler, struct rtp_payload_type *dest, + GHashTable *output_transcoders, int dtmf_payload_type, bool pcm_dtmf_detect, + int cn_payload_type) +{ + __make_transcoder_full(handler, dest, output_transcoders, dtmf_payload_type, pcm_dtmf_detect, + cn_payload_type, packet_decoded_fifo); +} // used for generic playback (audio_player, t38_gateway) struct codec_handler *codec_handler_make_playback(const struct rtp_payload_type *src_pt,