tests: va: fix vapostproc test for DMABuf
Now it picks the first format in the template srcpad list and do the convertion. Also the format size is reduced because not all drives support 4K as DMABuf (radeonsi). Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7636>
This commit is contained in:
parent
7c06001705
commit
809ab829d0
@ -62,18 +62,73 @@ GST_START_TEST (raw_copy)
|
||||
|
||||
GST_END_TEST;
|
||||
|
||||
static GstCaps *
|
||||
get_drmdma_format (void)
|
||||
{
|
||||
GstElement *vpp;
|
||||
GstCaps *templ, *allowed_caps, *drm_caps = NULL;
|
||||
GstPad *srcpad;
|
||||
guint i;
|
||||
|
||||
vpp = gst_element_factory_make ("vapostproc", NULL);
|
||||
if (!vpp)
|
||||
return NULL;
|
||||
srcpad = gst_element_get_static_pad (vpp, "src");
|
||||
fail_unless (srcpad != NULL);
|
||||
templ = gst_pad_get_pad_template_caps (srcpad);
|
||||
fail_unless (templ != NULL);
|
||||
|
||||
allowed_caps = gst_caps_normalize (templ);
|
||||
|
||||
for (i = 0; i < gst_caps_get_size (allowed_caps); ++i) {
|
||||
GstStructure *new_structure;
|
||||
GstStructure *structure;
|
||||
|
||||
/* non-dmabuf caps don't describe drm-format: skip them */
|
||||
structure = gst_caps_get_structure (allowed_caps, i);
|
||||
if (!gst_structure_has_field (structure, "drm-format"))
|
||||
continue;
|
||||
|
||||
drm_caps = gst_caps_new_empty ();
|
||||
new_structure = gst_structure_copy (structure);
|
||||
gst_structure_set (new_structure, "framerate", GST_TYPE_FRACTION,
|
||||
1, 1, NULL);
|
||||
gst_structure_remove_field (new_structure, "width");
|
||||
gst_structure_remove_field (new_structure, "height");
|
||||
gst_caps_append_structure (drm_caps, new_structure);
|
||||
gst_caps_set_features_simple (drm_caps,
|
||||
gst_caps_features_new_single_static_str ("memory:DMABuf"));
|
||||
|
||||
GST_DEBUG ("have caps %" GST_PTR_FORMAT, drm_caps);
|
||||
/* should be fixed without width/height */
|
||||
fail_unless (gst_caps_is_fixed (drm_caps));
|
||||
break;
|
||||
}
|
||||
|
||||
gst_caps_unref (allowed_caps);
|
||||
gst_object_unref (srcpad);
|
||||
gst_object_unref (vpp);
|
||||
|
||||
return drm_caps;
|
||||
}
|
||||
|
||||
GST_START_TEST (dmabuf_copy)
|
||||
{
|
||||
GstHarness *h;
|
||||
GstBuffer *buf, *buf_copy;
|
||||
gboolean ret;
|
||||
GstCaps *drm_caps;
|
||||
|
||||
h = gst_harness_new_parse ("videotestsrc num-buffers=1 ! "
|
||||
"video/x-raw, width=(int)1024, height=(int)768 ! vapostproc");
|
||||
ck_assert (h);
|
||||
|
||||
gst_harness_set_sink_caps_str (h,
|
||||
"video/x-raw(memory:DMABuf), format=(string)NV12, width=(int)3840, height=(int)2160");
|
||||
drm_caps = get_drmdma_format ();
|
||||
ck_assert (drm_caps);
|
||||
gst_caps_set_simple (drm_caps, "width", G_TYPE_INT, 1600, "height",
|
||||
G_TYPE_INT, 1200, NULL);
|
||||
|
||||
gst_harness_set_sink_caps (h, drm_caps);
|
||||
|
||||
gst_harness_add_propose_allocation_meta (h, GST_VIDEO_META_API_TYPE, NULL);
|
||||
gst_harness_play (h);
|
||||
|
Loading…
x
Reference in New Issue
Block a user