diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2015-02-15 20:49:16 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2015-02-15 20:49:21 +0100 |
commit | 3773b6edea6f40a4e3ee4814a88d74339da4d22b (patch) | |
tree | bff81eedb2edbdbcde55fcf77d198e81fae7d8df | |
parent | 3171ac209b04726496a3eaa296629d40f25c2af8 (diff) | |
parent | b8df0b71c525e9fc9fbee790d093bae3aa62035c (diff) | |
download | ffmpeg-streaming-3773b6edea6f40a4e3ee4814a88d74339da4d22b.zip ffmpeg-streaming-3773b6edea6f40a4e3ee4814a88d74339da4d22b.tar.gz |
Merge commit 'b8df0b71c525e9fc9fbee790d093bae3aa62035c'
* commit 'b8df0b71c525e9fc9fbee790d093bae3aa62035c':
rtp: h264: Move profile_level_id parsing to a function
Merged-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavformat/rtpdec_h264.c | 56 |
1 files changed, 31 insertions, 25 deletions
diff --git a/libavformat/rtpdec_h264.c b/libavformat/rtpdec_h264.c index 4dbbae7..31b3212 100644 --- a/libavformat/rtpdec_h264.c +++ b/libavformat/rtpdec_h264.c @@ -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); |