From: Brad Hards Date: Thu, 17 Feb 2022 04:55:19 +0000 (+1100) Subject: h264parse: add unit test for Precision Time Stamp in SEI messages X-Git-Tag: 1.22.0~1517 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=804a6054bb3f2148d4d337eba9aa59367e86b6ea;p=platform%2Fupstream%2Fgstreamer.git h264parse: add unit test for Precision Time Stamp in SEI messages Part-of: --- diff --git a/subprojects/gst-plugins-bad/tests/check/elements/h264parse.c b/subprojects/gst-plugins-bad/tests/check/elements/h264parse.c index 36a0f6d..97cc063 100644 --- a/subprojects/gst-plugins-bad/tests/check/elements/h264parse.c +++ b/subprojects/gst-plugins-bad/tests/check/elements/h264parse.c @@ -29,6 +29,7 @@ #include #include +#include #include "gst-libs/gst/codecparsers/gsth264parser.h" #include "parser.h" @@ -1463,6 +1464,58 @@ GST_START_TEST (test_parse_aud_insert) GST_END_TEST; +GST_START_TEST (test_parse_sei_userdefinedunregistered) +{ + GstVideoSEIUserDataUnregisteredMeta *meta; + GstHarness *h; + GstBuffer *buf; + + const guint8 misb_sei[] = { + 0x00, 0x00, 0x00, 0x20, 0x06, 0x05, 0x1c, 0x4d, + 0x49, 0x53, 0x50, 0x6d, 0x69, 0x63, 0x72, 0x6f, + 0x73, 0x65, 0x63, 0x74, 0x69, 0x6d, 0x65, 0x1f, + 0x00, 0x05, 0xff, 0x21, 0x7e, 0xff, 0x29, 0xb5, + 0xff, 0xdc, 0x13, 0x80, + /* IDR frame (doesn't match caps) */ + 0x00, 0x00, 0x00, 0x14, 0x65, 0x88, 0x84, 0x00, + 0x10, 0xff, 0xfe, 0xf6, 0xf0, 0xfe, 0x05, 0x36, + 0x56, 0x04, 0x50, 0x96, 0x7b, 0x3f, 0x53, 0xe1 + }; + const gsize misb_sei_size = sizeof (misb_sei); + + // Expected result - time status plus padded data + const guint8 st0604_data[] = { + 0x1f, 0x00, 0x05, 0xff, 0x21, 0x7e, 0xff, 0x29, + 0xb5, 0xff, 0xdc, 0x13 + }; + + h = gst_harness_new ("h264parse"); + + gst_harness_set_src_caps_str (h, + "video/x-h264, stream-format=(string)avc," + " width=(int)1920, height=(int)1080, framerate=(fraction)25/1," + " bit-depth-chroma=(uint)8, parsed=(boolean)true," + " alignment=(string)au, profile=(string)high, level=(string)4," + " codec_data=(buffer)01640028ffe1001a67640028acb200f0044fcb080000030008000003019478c1924001000568ebccb22c"); + + buf = gst_buffer_new_and_alloc (misb_sei_size); + gst_buffer_fill (buf, 0, misb_sei, misb_sei_size); + fail_unless_equals_int (gst_harness_push (h, buf), GST_FLOW_OK); + + buf = gst_harness_pull (h); + meta = gst_buffer_get_video_sei_user_data_unregistered_meta (buf); + fail_unless (meta != NULL); + + fail_unless (memcmp (meta->uuid, H264_MISP_MICROSECTIME, 16) == 0); + fail_unless (memcmp (meta->data, st0604_data, 12) == 0); + + gst_buffer_unref (buf); + + gst_harness_teardown (h); +} + +GST_END_TEST; + /* * TODO: * - Both push- and pull-modes need to be tested @@ -1575,6 +1628,7 @@ main (int argc, char **argv) tcase_add_test (tc_chain, test_parse_compatible_caps); tcase_add_test (tc_chain, test_parse_skip_to_4bytes_sc); tcase_add_test (tc_chain, test_parse_aud_insert); + tcase_add_test (tc_chain, test_parse_sei_userdefinedunregistered); nf += gst_check_run_suite (s, "h264parse", __FILE__); } diff --git a/subprojects/gst-plugins-base/gst-libs/gst/video/video-sei.c b/subprojects/gst-plugins-base/gst-libs/gst/video/video-sei.c index 2a8ebce..576be8f 100644 --- a/subprojects/gst-plugins-base/gst-libs/gst/video/video-sei.c +++ b/subprojects/gst-plugins-base/gst-libs/gst/video/video-sei.c @@ -35,22 +35,6 @@ * metadata in H.264 and H.265 streams. */ -/* ST 0604 Section 11.1 12.1, 12.2 */ -static const guint8 H264_MISP_MICROSECTIME[] = { - 0x4D, 0x49, 0x53, 0x50, 0x6D, 0x69, 0x63, 0x72, - 0x6F, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6D, 0x65 -}; - -static const guint8 H265_MISP_MICROSECONDS[] = { - 0xA8, 0x68, 0x7D, 0xD4, 0xD7, 0x59, 0x37, 0x58, - 0xA5, 0xCE, 0xF0, 0x33, 0x8B, 0x65, 0x45, 0xF1 -}; - -static const guint8 H265_MISP_NANOSECONDS[] = { - 0xCF, 0x84, 0x82, 0x78, 0xEE, 0x23, 0x30, 0x6C, - 0x92, 0x65, 0xE8, 0xFE, 0xF2, 0x2F, 0xB8, 0xB8 -}; - #ifndef GST_DISABLE_GST_DEBUG #define GST_CAT_DEFAULT ensure_debug_category() static GstDebugCategory * diff --git a/subprojects/gst-plugins-base/gst-libs/gst/video/video-sei.h b/subprojects/gst-plugins-base/gst-libs/gst/video/video-sei.h index 7c5e255..6dd67d8 100644 --- a/subprojects/gst-plugins-base/gst-libs/gst/video/video-sei.h +++ b/subprojects/gst-plugins-base/gst-libs/gst/video/video-sei.h @@ -27,6 +27,36 @@ G_BEGIN_DECLS /** + * MISB UUID for H.264 Precision Time Stamp + * + * This is from MISB ST 0604.6 Section 11.1. + */ +static const guint8 H264_MISP_MICROSECTIME[] = { + 0x4D, 0x49, 0x53, 0x50, 0x6D, 0x69, 0x63, 0x72, + 0x6F, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6D, 0x65 +}; + +/** + * MISB UUID for H.265 Precision Time Stamp + * + * This is from MISB ST 0604.6 Section 12.1. + */ +static const guint8 H265_MISP_MICROSECONDS[] = { + 0xA8, 0x68, 0x7D, 0xD4, 0xD7, 0x59, 0x37, 0x58, + 0xA5, 0xCE, 0xF0, 0x33, 0x8B, 0x65, 0x45, 0xF1 +}; + +/** + * MISB UUID for H.265 Nano Time Stamp + * + * This is from MISB ST 0604.6 Section 12.1. + */ +static const guint8 H265_MISP_NANOSECONDS[] = { + 0xCF, 0x84, 0x82, 0x78, 0xEE, 0x23, 0x30, 0x6C, + 0x92, 0x65, 0xE8, 0xFE, 0xF2, 0x2F, 0xB8, 0xB8 +}; + +/** * GstVideoSEIUserDataUnregisteredMeta: * @meta: parent #GstMeta * @description: H.264 H.265 metadata from SEI User Data Unregistered messages