[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