[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