@ -176,13 +176,16 @@ static int get_sockaddr(const char *buf, struct sockaddr_storage *sock)
# if CONFIG_RTPDEC
static void init_rtp_handler ( RTPDynamicProtocolHandler * handler ,
RTSPStream * rtsp_st , AVCodecContext * codec )
RTSPStream * rtsp_st , AVStream * st )
{
AVCodecContext * codec = st ? st - > codec : NULL ;
if ( ! handler )
return ;
if ( codec )
codec - > codec_id = handler - > codec_id ;
rtsp_st - > dynamic_handler = handler ;
if ( st )
st - > need_parsing = handler - > need_parsing ;
if ( handler - > alloc ) {
rtsp_st - > dynamic_protocol_context = handler - > alloc ( ) ;
if ( ! rtsp_st - > dynamic_protocol_context )
@ -215,7 +218,7 @@ static int sdp_parse_rtpmap(AVFormatContext *s,
if ( codec - > codec_id = = AV_CODEC_ID_NONE ) {
RTPDynamicProtocolHandler * handler =
ff_rtp_handler_find_by_name ( buf , codec - > codec_type ) ;
init_rtp_handler ( handler , rtsp_st , codec ) ;
init_rtp_handler ( handler , rtsp_st , st ) ;
/* If no dynamic handler was found, check with the list of standard
* allocated types , if such a stream for some reason happens to
* use a private payload type . This isn ' t handled in rtpdec . c , since
@ -465,7 +468,7 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1,
/* Even static payload types may need a custom depacketizer */
handler = ff_rtp_handler_find_by_id (
rtsp_st - > sdp_payload_type , st - > codec - > codec_type ) ;
init_rtp_handler ( handler , rtsp_st , st - > codec ) ;
init_rtp_handler ( handler , rtsp_st , st ) ;
if ( handler & & handler - > init )
handler - > init ( s , st - > index ,
rtsp_st - > dynamic_protocol_context ) ;