@ -64,6 +64,35 @@ struct PayloadContext {
static const uint8_t start_sequence [ ] = { 0 , 0 , 0 , 1 } ;
static void parse_profile_level_id ( AVFormatContext * s ,
PayloadContext * h264_data ,
char * value )
{
char buffer [ 3 ] ;
// 6 characters=3 bytes, in hex.
uint8_t profile_idc ;
uint8_t profile_iop ;
uint8_t level_idc ;
buffer [ 0 ] = value [ 0 ] ;
buffer [ 1 ] = value [ 1 ] ;
buffer [ 2 ] = ' \0 ' ;
profile_idc = strtol ( buffer , NULL , 16 ) ;
buffer [ 0 ] = value [ 2 ] ;
buffer [ 1 ] = value [ 3 ] ;
profile_iop = strtol ( buffer , NULL , 16 ) ;
buffer [ 0 ] = value [ 4 ] ;
buffer [ 1 ] = value [ 5 ] ;
level_idc = strtol ( buffer , NULL , 16 ) ;
av_log ( s , AV_LOG_DEBUG ,
" RTP Profile IDC: %x Profile IOP: %x Level: %x \n " ,
profile_idc , profile_iop , level_idc ) ;
h264_data - > profile_idc = profile_idc ;
h264_data - > profile_iop = profile_iop ;
h264_data - > level_idc = level_idc ;
}
static int sdp_parse_fmtp_config_h264 ( AVFormatContext * s ,
AVStream * stream ,
PayloadContext * h264_data ,
@ -87,31 +116,8 @@ static int sdp_parse_fmtp_config_h264(AVFormatContext *s,
av_log ( s , AV_LOG_ERROR ,
" Interleaved RTP mode is not supported yet. \n " ) ;
} else if ( ! strcmp ( attr , " profile-level-id " ) ) {
if ( strlen ( value ) = = 6 ) {
char buffer [ 3 ] ;
// 6 characters=3 bytes, in hex.
uint8_t profile_idc ;
uint8_t profile_iop ;
uint8_t level_idc ;
buffer [ 0 ] = value [ 0 ] ;
buffer [ 1 ] = value [ 1 ] ;
buffer [ 2 ] = ' \0 ' ;
profile_idc = strtol ( buffer , NULL , 16 ) ;
buffer [ 0 ] = value [ 2 ] ;
buffer [ 1 ] = value [ 3 ] ;
profile_iop = strtol ( buffer , NULL , 16 ) ;
buffer [ 0 ] = value [ 4 ] ;
buffer [ 1 ] = value [ 5 ] ;
level_idc = strtol ( buffer , NULL , 16 ) ;
av_log ( s , AV_LOG_DEBUG ,
" RTP Profile IDC: %x Profile IOP: %x Level: %x \n " ,
profile_idc , profile_iop , level_idc ) ;
h264_data - > profile_idc = profile_idc ;
h264_data - > profile_iop = profile_iop ;
h264_data - > level_idc = level_idc ;
}
if ( strlen ( value ) = = 6 )
parse_profile_level_id ( s , h264_data , value ) ;
} else if ( ! strcmp ( attr , " sprop-parameter-sets " ) ) {
codec - > extradata_size = 0 ;
av_freep ( & codec - > extradata ) ;