@ -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 ,