summaryrefslogtreecommitdiff
path: root/libavformat/rtpdec_h264.c
diff options
context:
space:
mode:
authorLuca Barbato <lu_zero@gentoo.org>2015-02-13 23:38:14 +0100
committerLuca Barbato <lu_zero@gentoo.org>2015-02-15 18:20:54 +0100
commitb8df0b71c525e9fc9fbee790d093bae3aa62035c (patch)
treef66136908db01106984f433bafbf9e225adb628e /libavformat/rtpdec_h264.c
parentd40815a982c36ff9da09ae3edb5e3bd7d97b5d42 (diff)
rtp: h264: Move profile_level_id parsing to a function
Diffstat (limited to 'libavformat/rtpdec_h264.c')
-rw-r--r--libavformat/rtpdec_h264.c56
1 files changed, 31 insertions, 25 deletions
diff --git a/libavformat/rtpdec_h264.c b/libavformat/rtpdec_h264.c
index abf1f39279..fa53304d74 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);