diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/check/libs/video.c | 85 |
1 files changed, 80 insertions, 5 deletions
diff --git a/tests/check/libs/video.c b/tests/check/libs/video.c index 0f13f303a..98b5e2663 100644 --- a/tests/check/libs/video.c +++ b/tests/check/libs/video.c @@ -743,11 +743,15 @@ GST_START_TEST (test_parse_caps_rgb) GstCaps *caps, *caps2; caps = gst_caps_from_string (formats[i].tmpl_caps_string); + fail_unless (caps != NULL); gst_caps_set_simple (caps, "width", G_TYPE_INT, 2 * (i + 1), "height", G_TYPE_INT, i + 1, "framerate", GST_TYPE_FRACTION, 15, 1, "pixel-aspect-ratio", GST_TYPE_FRACTION, 1, 1, "interlace-mode", G_TYPE_STRING, "progressive", - "colorimetry", G_TYPE_STRING, "1:1:0:0", NULL); + "colorimetry", G_TYPE_STRING, "1:1:0:0", + "multiview-mode", G_TYPE_STRING, "mono", + "multiview-flags", GST_TYPE_VIDEO_MULTIVIEW_FLAGSET, 0, + GST_FLAG_SET_MASK_EXACT, NULL); g_assert (gst_caps_is_fixed (caps)); GST_DEBUG ("testing caps: %" GST_PTR_FORMAT, caps); @@ -760,10 +764,14 @@ GST_START_TEST (test_parse_caps_rgb) /* make sure they're serialised back correctly */ caps2 = gst_video_info_to_caps (&vinfo); - fail_unless (caps != NULL); - fail_unless (gst_caps_is_equal (caps, caps2), - "caps [%" GST_PTR_FORMAT "] not equal to caps2 [%" GST_PTR_FORMAT "]", - caps, caps2); + fail_unless (caps2 != NULL); + if (!gst_caps_is_equal (caps, caps2)) { + gchar *caps1s = gst_caps_to_string (caps); + gchar *caps2s = gst_caps_to_string (caps2); + fail ("caps [%s] not equal to caps2 [%s]", caps1s, caps2s); + g_free (caps1s); + g_free (caps2s); + } gst_caps_unref (caps); gst_caps_unref (caps2); @@ -772,6 +780,72 @@ GST_START_TEST (test_parse_caps_rgb) GST_END_TEST; +GST_START_TEST (test_parse_caps_multiview) +{ + gint i, j; + GstVideoMultiviewMode modes[] = { + GST_VIDEO_MULTIVIEW_MODE_MONO, + GST_VIDEO_MULTIVIEW_MODE_LEFT, + GST_VIDEO_MULTIVIEW_MODE_RIGHT, + GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE, + GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX, + GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED, + GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED, + GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM, + GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD, + GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME, + GST_VIDEO_MULTIVIEW_MODE_MULTIVIEW_FRAME_BY_FRAME, + GST_VIDEO_MULTIVIEW_MODE_SEPARATED, + }; + GstVideoMultiviewFlags flags[] = { + GST_VIDEO_MULTIVIEW_FLAGS_NONE, + GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST, + GST_VIDEO_MULTIVIEW_FLAGS_LEFT_FLIPPED, + GST_VIDEO_MULTIVIEW_FLAGS_LEFT_FLOPPED, + GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_FLIPPED, + GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_FLOPPED, + GST_VIDEO_MULTIVIEW_FLAGS_MIXED_MONO, + GST_VIDEO_MULTIVIEW_FLAGS_MIXED_MONO | + GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST, + GST_VIDEO_MULTIVIEW_FLAGS_MIXED_MONO | + GST_VIDEO_MULTIVIEW_FLAGS_LEFT_FLIPPED + }; + + for (i = 0; i < G_N_ELEMENTS (modes); i++) { + for (j = 0; j < G_N_ELEMENTS (flags); j++) { + GstVideoInfo vinfo; + GstCaps *caps; + + gst_video_info_init (&vinfo); + gst_video_info_set_format (&vinfo, GST_VIDEO_FORMAT_I420, 320, 240); + + vinfo.multiview_mode = modes[i]; + vinfo.multiview_flags = flags[j]; + + caps = gst_video_info_to_caps (&vinfo); + fail_if (caps == NULL); + GST_LOG ("mview mode %d flags %x -> caps %" GST_PTR_FORMAT, + modes[i], flags[j], caps); + + fail_unless (gst_video_info_from_caps (&vinfo, caps)); + + GST_LOG ("mview mode %d flags %x -> info mode %d flags %x", + modes[i], flags[j], vinfo.multiview_mode, vinfo.multiview_flags); + + fail_unless (vinfo.multiview_mode == modes[i], + "Expected multiview mode %d got mode %d", modes[i], + vinfo.multiview_mode); + fail_unless (vinfo.multiview_flags == flags[j], + "Expected multiview flags 0x%x got 0x%x", flags[j], + vinfo.multiview_flags); + + gst_caps_unref (caps); + } + } +} + +GST_END_TEST; + GST_START_TEST (test_events) { GstEvent *e; @@ -2576,6 +2650,7 @@ video_suite (void) tcase_add_test (tc_chain, test_video_formats_pack_unpack); tcase_add_test (tc_chain, test_dar_calc); tcase_add_test (tc_chain, test_parse_caps_rgb); + tcase_add_test (tc_chain, test_parse_caps_multiview); tcase_add_test (tc_chain, test_events); tcase_add_test (tc_chain, test_convert_frame); tcase_add_test (tc_chain, test_convert_frame_async); |