On 02/14/2015 01:47 AM, Luca Barbato wrote:
---
  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);

Okay.

Thanks!

BR,
Thomas.
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to