@ -198,6 +198,25 @@ static void init_rtp_handler(RTPDynamicProtocolHandler *handler,
}
}
static void finalize_rtp_handler_init ( AVFormatContext * s , RTSPStream * rtsp_st ,
AVStream * st )
{
if ( rtsp_st - > dynamic_handler & & rtsp_st - > dynamic_handler - > init ) {
int ret = rtsp_st - > dynamic_handler - > init ( s , st ? st - > index : - 1 ,
rtsp_st - > dynamic_protocol_context ) ;
if ( ret < 0 ) {
if ( rtsp_st - > dynamic_protocol_context ) {
if ( rtsp_st - > dynamic_handler - > free )
rtsp_st - > dynamic_handler - > free (
rtsp_st - > dynamic_protocol_context ) ;
av_free ( rtsp_st - > dynamic_protocol_context ) ;
}
rtsp_st - > dynamic_protocol_context = NULL ;
rtsp_st - > dynamic_handler = NULL ;
}
}
}
/* parse the rtpmap description: <codec_name>/<clock_rate>[/<other params>] */
static int sdp_parse_rtpmap ( AVFormatContext * s ,
AVStream * st , RTSPStream * rtsp_st ,
@ -266,9 +285,7 @@ static int sdp_parse_rtpmap(AVFormatContext *s,
default :
break ;
}
if ( rtsp_st - > dynamic_handler & & rtsp_st - > dynamic_handler - > init )
rtsp_st - > dynamic_handler - > init ( s , st - > index ,
rtsp_st - > dynamic_protocol_context ) ;
finalize_rtp_handler_init ( s , rtsp_st , st ) ;
return 0 ;
}
@ -451,8 +468,7 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1,
handler = ff_rtp_handler_find_by_id (
rtsp_st - > sdp_payload_type , AVMEDIA_TYPE_DATA ) ;
init_rtp_handler ( handler , rtsp_st , NULL ) ;
if ( handler & & handler - > init )
handler - > init ( s , - 1 , rtsp_st - > dynamic_protocol_context ) ;
finalize_rtp_handler_init ( s , rtsp_st , NULL ) ;
}
} else if ( rt - > server_type = = RTSP_SERVER_WMS & &
codec_type = = AVMEDIA_TYPE_DATA ) {
@ -476,9 +492,7 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1,
handler = ff_rtp_handler_find_by_id (
rtsp_st - > sdp_payload_type , st - > codec - > codec_type ) ;
init_rtp_handler ( handler , rtsp_st , st ) ;
if ( handler & & handler - > init )
handler - > init ( s , st - > index ,
rtsp_st - > dynamic_protocol_context ) ;
finalize_rtp_handler_init ( s , rtsp_st , st ) ;
}
if ( rt - > default_lang [ 0 ] )
av_dict_set ( & st - > metadata , " language " , rt - > default_lang , 0 ) ;