diff options
-rw-r--r-- | tests/check/Makefile.am | 5 | ||||
-rw-r--r-- | tests/check/elements/h264parse.c | 62 |
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; } |