@ -4749,11 +4749,17 @@ void codec_store_transcode(struct codec_store *cs, GQueue *offer, struct codec_s
// special case of codec_store_offer(): synthesise codecs that were not already present
// special case of codec_store_offer(): synthesise codecs that were not already present
for ( GList * l = offer - > head ; l ; l = l - > next ) {
for ( GList * l = offer - > head ; l ; l = l - > next ) {
str * codec = l - > data ;
str * codec = l - > data ;
GQueue * pts = g_hash_table_lookup ( cs - > codec_names , codec ) ;
// parse out given codec string
if ( pts & & pts - > length ) {
AUTO_CLEANUP ( struct rtp_payload_type * pt , payload_type_destroy )
= codec_make_payload_type_sup ( codec , cs - > media ) ;
// find matching existing PT if one exists
struct rtp_payload_type * pt_match = NULL ;
codec_store_find_matching_codecs ( NULL , & pt_match , cs , codec , pt ) ;
if ( pt_match ) {
ilogs ( codec , LOG_DEBUG , " Codec " STR_FORMAT
ilogs ( codec , LOG_DEBUG , " Codec " STR_FORMAT
" already present (%i) " ,
" already present (%i) " ,
STR_FMT ( codec ) , GPOINTER_TO_INT ( pts - > head - > data ) ) ;
STR_FMT ( codec ) , pt_match - > payload_type ) ;
continue ;
continue ;
}
}
GQueue * orig_list = g_hash_table_lookup ( orig - > codec_names , codec ) ;
GQueue * orig_list = g_hash_table_lookup ( orig - > codec_names , codec ) ;
@ -4762,7 +4768,7 @@ void codec_store_transcode(struct codec_store *cs, GQueue *offer, struct codec_s
" for transcoding " ,
" for transcoding " ,
STR_FMT ( codec ) ) ;
STR_FMT ( codec ) ) ;
// create new payload type
// create new payload type
struct rtp_payload_type * pt = codec_add_payload_type ( codec , cs - > media , NULL , orig ) ;
pt = codec_add_payload_type_pt ( pt , cs - > media , NULL , orig ) ;
if ( ! pt )
if ( ! pt )
continue ;
continue ;
pt - > for_transcoding = 1 ;
pt - > for_transcoding = 1 ;
@ -4772,6 +4778,7 @@ void codec_store_transcode(struct codec_store *cs, GQueue *offer, struct codec_s
STR_FMT ( & pt - > encoding_with_params ) , pt - > payload_type ) ;
STR_FMT ( & pt - > encoding_with_params ) , pt - > payload_type ) ;
codec_touched ( cs , pt ) ;
codec_touched ( cs , pt ) ;
codec_store_add_raw_order ( cs , pt ) ;
codec_store_add_raw_order ( cs , pt ) ;
pt = NULL ;
continue ;
continue ;
}
}
// XXX duplicate code
// XXX duplicate code