[gst-cvs] gst-plugins-bad: h264parse: decode SEI

Sebastian Dröge slomo at kemper.freedesktop.org
Mon Aug 31 00:15:25 PDT 2009


Module: gst-plugins-bad
Branch: master
Commit: 62ac493c5cebb6bc43be3983ff48d6b66c4eb319
URL:    http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=62ac493c5cebb6bc43be3983ff48d6b66c4eb319

Author: Lin YANG <oxcsnicho at gmail.com>
Date:   Mon Aug 17 17:53:11 2009 +0800

h264parse: decode SEI

---

 gst/h264parse/gsth264parse.c |   39 +++++++++++++++++++++++++++++++++++++++
 1 files changed, 39 insertions(+), 0 deletions(-)

diff --git a/gst/h264parse/gsth264parse.c b/gst/h264parse/gsth264parse.c
index 8b9b8b9..502602a 100644
--- a/gst/h264parse/gsth264parse.c
+++ b/gst/h264parse/gsth264parse.c
@@ -680,6 +680,45 @@ gst_sei_decode_picture_timing (GstH264Parse * h, GstNalBs * bs)
   return 0;
 }
 
+/* decode supplimental enhancement information */
+static gboolean
+gst_nal_decode_sei (GstH264Parse * h, GstNalBs * bs)
+{
+  guint8 tmp;
+  GstSeiPayloadType payloadType = 0;
+  gint8 payloadSize = 0;
+
+  do {
+    tmp = gst_nal_bs_read (bs, 8);
+    payloadType += tmp;
+  } while (tmp == 255);
+  do {
+    tmp = gst_nal_bs_read (bs, 8);
+    payloadSize += tmp;
+  } while (tmp == 255);
+  GST_DEBUG_OBJECT (h,
+      "SEI message received: payloadType = %d, payloadSize = %d bytes",
+      payloadType, payloadSize);
+
+  switch (payloadType) {
+    case SEI_BUF_PERIOD:
+      if (!gst_sei_decode_buffering_period (h, bs))
+        return FALSE;
+      break;
+    case SEI_PIC_TIMING:
+      /* TODO: According to H264 D2.2 Note1, it might be the case that the
+       * picture timing SEI message is encountered before the corresponding SPS
+       * is specified. Need to hold down the message and decode it later.  */
+      if (!gst_sei_decode_picture_timing (h, bs))
+        return FALSE;
+      break;
+    default:
+      GST_DEBUG_OBJECT (h, "SEI message of payloadType = %d is recieved but not"
+          " parsed", payloadType);
+  }
+
+  return TRUE;
+}
 
 GST_BOILERPLATE (GstH264Parse, gst_h264_parse, GstElement, GST_TYPE_ELEMENT);
 





More information about the Gstreamer-commits mailing list