[FFmpeg-cvslog] rtp: h264: Move profile_level_id parsing to a function
Luca Barbato
git at videolan.org
Sun Feb 15 20:57:52 CET 2015
ffmpeg | branch: master | Luca Barbato <lu_zero at gentoo.org> | Fri Feb 13 23:38:14 2015 +0100| [b8df0b71c525e9fc9fbee790d093bae3aa62035c] | committer: Luca Barbato
rtp: h264: Move profile_level_id parsing to a function
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=b8df0b71c525e9fc9fbee790d093bae3aa62035c
---
libavformat/rtpdec_h264.c | 56 +++++++++++++++++++++++++--------------------
1 file changed, 31 insertions(+), 25 deletions(-)
diff --git a/libavformat/rtpdec_h264.c b/libavformat/rtpdec_h264.c
index abf1f39..fa53304 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);
More information about the ffmpeg-cvslog
mailing list