summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim-Philipp Müller <tim@centricular.com>2019-04-07 13:47:38 +0100
committerTim-Philipp Müller <tim@centricular.com>2019-04-08 19:21:34 +0100
commita94f4064cb06247b9d59f4edf5b1b6ae6c80ee58 (patch)
treeea58086930401eb742b8533930d09ac75bd8f54a
parent76f1ed15fb93d5ec5e3df02e101d8d414179ce73 (diff)
downloadgstreamer-plugins-bad-a94f4064cb06247b9d59f4edf5b1b6ae6c80ee58.tar.gz
tests: h264parse: add minimal unit test for closed caption SEI parsing
-rw-r--r--tests/check/Makefile.am5
-rw-r--r--tests/check/elements/h264parse.c62
2 files changed, 64 insertions, 3 deletions
diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am
index 30f46b397..a05bc5792 100644
--- a/tests/check/Makefile.am
+++ b/tests/check/Makefile.am
@@ -350,7 +350,10 @@ elements_mpeg4videoparse_LDADD = libparser.la $(LDADD)
elements_h263parse_LDADD = libparser.la $(LDADD)
-elements_h264parse_LDADD = libparser.la $(LDADD)
+elements_h264parse_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) \
+ $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
+elements_h264parse_LDADD = libparser.la \
+ $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) $(LDADD)
elements_pcapparse_LDADD = libparser.la $(LDADD)
diff --git a/tests/check/elements/h264parse.c b/tests/check/elements/h264parse.c
index 5a6d3e472..5be57195c 100644
--- a/tests/check/elements/h264parse.c
+++ b/tests/check/elements/h264parse.c
@@ -23,7 +23,8 @@
* Boston, MA 02110-1301, USA.
*/
-#include <gst/check/gstcheck.h>
+#include <gst/check/check.h>
+#include <gst/video/video.h>
#include "parser.h"
#define SRC_CAPS_TMPL "video/x-h264, parsed=(boolean)false"
@@ -397,7 +398,6 @@ GST_START_TEST (test_sink_caps_reordering)
GST_END_TEST;
-
static Suite *
h264parse_suite (void)
{
@@ -516,6 +516,55 @@ h264parse_packetized_suite (void)
return s;
}
+GST_START_TEST (test_parse_sei_closedcaptions)
+{
+ GstVideoCaptionMeta *cc;
+ GstHarness *h;
+ GstBuffer *buf;
+
+ const guint8 cc_sei_plus_idr[] = {
+ 0x00, 0x00, 0x00, 0x4b, 0x06, 0x04, 0x47, 0xb5, 0x00, 0x31, 0x47, 0x41,
+ 0x39, 0x34, 0x03, 0xd4,
+ 0xff, 0xfc, 0x80, 0x80, 0xfd, 0x80, 0x80, 0xfa, 0x00, 0x00, 0xfa, 0x00,
+ 0x00, 0xfa, 0x00, 0x00,
+ 0xfa, 0x00, 0x00, 0xfa, 0x00, 0x00, 0xfa, 0x00, 0x00, 0xfa, 0x00, 0x00,
+ 0xfa, 0x00, 0x00, 0xfa,
+ 0x00, 0x00, 0xfa, 0x00, 0x00, 0xfa, 0x00, 0x00, 0xfa, 0x00, 0x00, 0xfa,
+ 0x00, 0x00, 0xfa, 0x00,
+ 0x00, 0xfa, 0x00, 0x00, 0xfa, 0x00, 0x00, 0xfa, 0x00, 0x00, 0xfa, 0x00,
+ 0x00, 0xff, 0x80,
+ /* IDR frame (doesn't necessarily 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 cc_sei_plus_idr_size = sizeof (cc_sei_plus_idr);
+
+ h = gst_harness_new ("h264parse");
+
+ gst_harness_set_src_caps_str (h,
+ "video/x-h264, stream-format=(string)avc, alignment=(string)au,"
+ " codec_data=(buffer)014d4015ffe10017674d4015eca4bf2e0220000003002ee6b28001e2c5b2c001000468ebecb2,"
+ " width=(int)32, height=(int)24, framerate=(fraction)30/1,"
+ " pixel-aspect-ratio=(fraction)1/1");
+
+ buf = gst_buffer_new_and_alloc (cc_sei_plus_idr_size);
+ gst_buffer_fill (buf, 0, cc_sei_plus_idr, cc_sei_plus_idr_size);
+ fail_unless_equals_int (gst_harness_push (h, buf), GST_FLOW_OK);
+
+ buf = gst_harness_pull (h);
+ cc = gst_buffer_get_video_caption_meta (buf);
+ fail_unless (cc != NULL);
+ fail_unless_equals_int (cc->caption_type, GST_VIDEO_CAPTION_TYPE_CEA708_RAW);
+ fail_unless_equals_int (cc->size, 60);
+ fail_unless_equals_int (cc->data[0], 0xfc);
+ fail_unless_equals_int (cc->data[3], 0xfd);
+ gst_buffer_unref (buf);
+
+ gst_harness_teardown (h);
+}
+
+GST_END_TEST;
/*
* TODO:
@@ -614,5 +663,14 @@ main (int argc, char **argv)
s = h264parse_packetized_suite ();
nf += gst_check_run_suite (s, ctx_suite, __FILE__ "_packetized.c");
+ {
+ TCase *tc_chain = tcase_create ("general");
+
+ s = suite_create ("h264parse");
+ suite_add_tcase (s, tc_chain);
+ tcase_add_test (tc_chain, test_parse_sei_closedcaptions);
+ nf += gst_check_run_suite (s, "h264parse", __FILE__);
+ }
+
return nf;
}