1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-02-26 05:57:45 +03:00

conf: add <graphics type='dbus'>

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
Marc-André Lureau 2022-05-13 20:38:11 +02:00 committed by Michal Privoznik
parent 14f45e5d8d
commit 88ba34f5a0
29 changed files with 272 additions and 4 deletions

View File

@ -926,6 +926,7 @@ VIR_ENUM_IMPL(virDomainGraphics,
"desktop",
"spice",
"egl-headless",
"dbus",
);
VIR_ENUM_IMPL(virDomainGraphicsListen,
@ -1920,6 +1921,11 @@ void virDomainGraphicsDefFree(virDomainGraphicsDef *def)
g_free(def->data.egl_headless.rendernode);
break;
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
g_free(def->data.dbus.address);
g_free(def->data.dbus.rendernode);
break;
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
break;
}
@ -12774,6 +12780,39 @@ virDomainGraphicsDefParseXMLEGLHeadless(virDomainGraphicsDef *def,
}
static int
virDomainGraphicsDefParseXMLDBus(virDomainGraphicsDef *def,
xmlNodePtr node,
xmlXPathContextPtr ctxt)
{
VIR_XPATH_NODE_AUTORESTORE(ctxt)
xmlNodePtr cur;
virTristateBool p2p;
if (virXMLPropTristateBool(node, "p2p", VIR_XML_PROP_NONE,
&p2p) < 0)
return -1;
def->data.dbus.p2p = p2p == VIR_TRISTATE_BOOL_YES;
def->data.dbus.address = virXMLPropString(node, "address");
def->data.dbus.fromConfig = def->data.dbus.address != NULL;
ctxt->node = node;
if ((cur = virXPathNode("./gl", ctxt))) {
def->data.dbus.rendernode = virXMLPropString(cur,
"rendernode");
if (virXMLPropTristateBool(cur, "enable",
VIR_XML_PROP_REQUIRED,
&def->data.dbus.gl) < 0)
return -1;
}
return 0;
}
virDomainGraphicsDef *
virDomainGraphicsDefNew(virDomainXMLOption *xmlopt)
{
@ -12846,6 +12885,10 @@ virDomainGraphicsDefParseXML(virDomainXMLOption *xmlopt,
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
virDomainGraphicsDefParseXMLEGLHeadless(def, node, ctxt);
break;
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
if (virDomainGraphicsDefParseXMLDBus(def, node, ctxt) < 0)
goto error;
break;
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
break;
}
@ -26610,6 +26653,27 @@ virDomainGraphicsDefFormat(virBuffer *buf,
def->data.egl_headless.rendernode);
virBufferAddLit(buf, "/>\n");
break;
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
if (def->data.dbus.p2p)
virBufferAddLit(buf, " p2p='yes'");
if (def->data.dbus.address)
virBufferAsprintf(buf, " address='%s'",
def->data.dbus.address);
if (!def->data.dbus.gl)
break;
if (!children) {
virBufferAddLit(buf, ">\n");
virBufferAdjustIndent(buf, 2);
children = true;
}
virBufferAsprintf(buf, "<gl enable='%s'",
virTristateBoolTypeToString(def->data.dbus.gl));
virBufferEscapeString(buf, " rendernode='%s'", def->data.dbus.rendernode);
virBufferAddLit(buf, "/>\n");
break;
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
break;
}
@ -31336,6 +31400,11 @@ virDomainGraphicsDefHasOpenGL(const virDomainDef *def)
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
return true;
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
if (graphics->data.dbus.gl == VIR_TRISTATE_BOOL_YES)
return true;
continue;
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
break;
}
@ -31351,7 +31420,8 @@ virDomainGraphicsSupportsRenderNode(const virDomainGraphicsDef *graphics)
bool ret = false;
if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE ||
graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS)
graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS ||
graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_DBUS)
ret = true;
return ret;
@ -31370,6 +31440,9 @@ virDomainGraphicsGetRenderNode(const virDomainGraphicsDef *graphics)
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
ret = graphics->data.egl_headless.rendernode;
break;
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
ret = graphics->data.dbus.rendernode;
break;
case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
case VIR_DOMAIN_GRAPHICS_TYPE_VNC:
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
@ -31391,6 +31464,9 @@ virDomainGraphicsNeedsAutoRenderNode(const virDomainGraphicsDef *graphics)
if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE &&
graphics->data.spice.gl != VIR_TRISTATE_BOOL_YES)
return false;
if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_DBUS &&
graphics->data.dbus.gl != VIR_TRISTATE_BOOL_YES)
return false;
if (virDomainGraphicsGetRenderNode(graphics))
return false;

View File

@ -1777,6 +1777,7 @@ typedef enum {
VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP,
VIR_DOMAIN_GRAPHICS_TYPE_SPICE,
VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS,
VIR_DOMAIN_GRAPHICS_TYPE_DBUS,
VIR_DOMAIN_GRAPHICS_TYPE_LAST
} virDomainGraphicsType;
@ -1953,6 +1954,13 @@ struct _virDomainGraphicsDef {
struct {
char *rendernode;
} egl_headless;
struct {
bool p2p;
char *address;
char *rendernode;
virTristateBool gl;
bool fromConfig; /* true if the @address is config file originated */
} dbus;
} data;
/* nListens, listens, and *port are only useful if type is vnc,
* rdp, or spice. They've been extracted from the union only to

View File

@ -2424,8 +2424,15 @@ virDomainGraphicsDefValidate(const virDomainDef *def,
return -1;
}
if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC)
if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC) {
return virDomainEnsureAudioID(def, graphics->data.vnc.audioId);
} else if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_DBUS) {
if (graphics->data.dbus.p2p && graphics->data.dbus.address) {
virReportError(VIR_ERR_XML_ERROR, "%s",
_("D-Bus p2p with an address is not supported"));
return -1;
}
}
return 0;
}

View File

@ -220,6 +220,13 @@
</define>
<!--======================================================================-->
<!-- A D-Bus server address: https://dbus.freedesktop.org/doc/dbus-specification.html#addresses -->
<define name="dbusAddr">
<data type="string">
<param name="pattern">.+</param>
</data>
</define>
<!-- An ipv4 "dotted quad" address -->
<define name="ipv4Addr">
<data type="string">

View File

@ -4045,6 +4045,39 @@
</optional>
</interleave>
</group>
<group>
<attribute name="type">
<value>dbus</value>
</attribute>
<optional>
<choice>
<group>
<attribute name="address">
<ref name="dbusAddr"/>
</attribute>
</group>
<group>
<attribute name="p2p">
<ref name="virYesNo"/>
</attribute>
</group>
</choice>
</optional>
<interleave>
<optional>
<element name="gl">
<attribute name="enable">
<ref name="virYesNo"/>
</attribute>
<optional>
<attribute name="rendernode">
<ref name="absFilePath"/>
</attribute>
</optional>
</element>
</optional>
</interleave>
</group>
<group>
<attribute name="type">
<value>rdp</value>

View File

@ -1538,6 +1538,7 @@ libxlMakeVfb(virPortAllocatorRange *graphicsports,
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
break;
}

View File

@ -957,6 +957,7 @@ libxlDomainCleanup(libxlDriverPrivate *driver,
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
break;
}

View File

@ -465,6 +465,7 @@ libxlReconnectDomain(virDomainObj *vm,
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
break;
}

View File

@ -6226,6 +6226,8 @@ virQEMUCapsFillDomainDeviceGraphicsCaps(virQEMUCaps *qemuCaps,
VIR_DOMAIN_CAPS_ENUM_SET(dev->type, VIR_DOMAIN_GRAPHICS_TYPE_SPICE);
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_EGL_HEADLESS))
VIR_DOMAIN_CAPS_ENUM_SET(dev->type, VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS);
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DISPLAY_DBUS))
VIR_DOMAIN_CAPS_ENUM_SET(dev->type, VIR_DOMAIN_GRAPHICS_TYPE_DBUS);
}

View File

@ -8591,6 +8591,7 @@ qemuBuildGraphicsCommandLine(virQEMUDriverConfig *cfg,
graphics) < 0)
return -1;
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
break;
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
@ -10190,6 +10191,7 @@ qemuBuildCommandLineValidate(virQEMUDriver *driver,
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
++egl_headless;
break;
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:

View File

@ -3707,6 +3707,7 @@ qemuDomainDefSuggestDefaultAudioBackend(virQEMUDriver *driver,
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
break;
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
default:

View File

@ -15717,12 +15717,13 @@ qemuDomainOpenGraphics(virDomainPtr dom,
case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
protocol = "spice";
break;
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("Can only open VNC or SPICE graphics backends, not %s"),
_("Can only open VNC, SPICE or D-Bus p2p graphics backends, not %s"),
virDomainGraphicsTypeToString(vm->def->graphics[idx]->type));
goto endjob;
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
@ -15785,12 +15786,13 @@ qemuDomainOpenGraphicsFD(virDomainPtr dom,
case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
protocol = "spice";
break;
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("Can only open VNC or SPICE graphics backends, not %s"),
_("Can only open VNC, SPICE or D-Bus p2p graphics backends, not %s"),
virDomainGraphicsTypeToString(vm->def->graphics[idx]->type));
goto cleanup;
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:

View File

@ -4323,6 +4323,7 @@ qemuDomainChangeGraphics(virQEMUDriver *driver,
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
virReportError(VIR_ERR_INTERNAL_ERROR,
_("unable to change config on '%s' graphics type"), type);
break;

View File

@ -4736,6 +4736,7 @@ qemuProcessGraphicsReservePorts(virDomainGraphicsDef *graphics,
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
break;
}
@ -4775,6 +4776,7 @@ qemuProcessGraphicsAllocatePorts(virQEMUDriver *driver,
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
break;
}
@ -4931,6 +4933,7 @@ qemuProcessGraphicsSetupListen(virQEMUDriver *driver,
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
break;
}
@ -5223,6 +5226,7 @@ qemuProcessStartValidateGraphics(virDomainObj *vm)
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
break;
}

View File

@ -4254,6 +4254,7 @@ qemuValidateDomainDeviceDefGraphics(const virDomainGraphicsDef *graphics,
case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
break;
}

View File

@ -3435,6 +3435,7 @@ virVMXFormatConfig(virVMXContext *ctx, virDomainXMLOption *xmlopt, virDomainDef
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("Unsupported graphics type '%s'"),
virDomainGraphicsTypeToString(def->graphics[i]->type));

View File

@ -155,6 +155,7 @@
<value>vnc</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
</enum>
</graphics>
<video supported='yes'>

View File

@ -169,6 +169,7 @@
<value>vnc</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
</enum>
</graphics>
<video supported='yes'>

View File

@ -155,6 +155,7 @@
<value>vnc</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
</enum>
</graphics>
<video supported='yes'>

View File

@ -155,6 +155,7 @@
<value>vnc</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
</enum>
</graphics>
<video supported='yes'>

View File

@ -169,6 +169,7 @@
<value>vnc</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
</enum>
</graphics>
<video supported='yes'>

View File

@ -155,6 +155,7 @@
<value>vnc</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
</enum>
</graphics>
<video supported='yes'>

View File

@ -0,0 +1,35 @@
<domain type='qemu'>
<name>QEMUGuest1</name>
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
<memory unit='KiB'>219100</memory>
<currentMemory unit='KiB'>219100</currentMemory>
<vcpu placement='static'>1</vcpu>
<os>
<type arch='i686' machine='pc'>hvm</type>
<boot dev='hd'/>
</os>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<devices>
<emulator>/usr/bin/qemu-system-i386</emulator>
<controller type='usb' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
</controller>
<controller type='ide' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
</controller>
<controller type='pci' index='0' model='pci-root'/>
<input type='mouse' bus='ps2'/>
<input type='keyboard' bus='ps2'/>
<graphics type='dbus' address='unix:path=/tmp/foo'>
<gl enable='yes' rendernode='/dev/dri/foo'/>
</graphics>
<video>
<model type='cirrus' vram='16384' heads='1' primary='yes'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<memballoon model='none'/>
</devices>
</domain>

View File

@ -0,0 +1,33 @@
<domain type='qemu'>
<name>QEMUGuest1</name>
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
<memory unit='KiB'>219100</memory>
<currentMemory unit='KiB'>219100</currentMemory>
<vcpu placement='static'>1</vcpu>
<os>
<type arch='i686' machine='pc'>hvm</type>
<boot dev='hd'/>
</os>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<devices>
<emulator>/usr/bin/qemu-system-i386</emulator>
<controller type='usb' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
</controller>
<controller type='ide' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
</controller>
<controller type='pci' index='0' model='pci-root'/>
<input type='mouse' bus='ps2'/>
<input type='keyboard' bus='ps2'/>
<graphics type='dbus' p2p='yes'/>
<video>
<model type='cirrus' vram='16384' heads='1' primary='yes'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<memballoon model='none'/>
</devices>
</domain>

View File

@ -0,0 +1,33 @@
<domain type='qemu'>
<name>QEMUGuest1</name>
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
<memory unit='KiB'>219100</memory>
<currentMemory unit='KiB'>219100</currentMemory>
<vcpu placement='static'>1</vcpu>
<os>
<type arch='i686' machine='pc'>hvm</type>
<boot dev='hd'/>
</os>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<devices>
<emulator>/usr/bin/qemu-system-i386</emulator>
<controller type='usb' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
</controller>
<controller type='ide' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
</controller>
<controller type='pci' index='0' model='pci-root'/>
<input type='mouse' bus='ps2'/>
<input type='keyboard' bus='ps2'/>
<graphics type='dbus'/>
<video>
<model type='cirrus' vram='16384' heads='1' primary='yes'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<memballoon model='none'/>
</devices>
</domain>

View File

@ -0,0 +1 @@
../qemuxml2argvdata/graphics-dbus-address.xml

View File

@ -0,0 +1 @@
../qemuxml2argvdata/graphics-dbus-p2p.xml

View File

@ -0,0 +1 @@
../qemuxml2argvdata/graphics-dbus.xml

View File

@ -403,6 +403,16 @@ mymain(void)
QEMU_CAPS_VNC,
QEMU_CAPS_EGL_HEADLESS);
DO_TEST("graphics-dbus",
QEMU_CAPS_DEVICE_CIRRUS_VGA,
QEMU_CAPS_DISPLAY_DBUS);
DO_TEST("graphics-dbus-address",
QEMU_CAPS_DEVICE_CIRRUS_VGA,
QEMU_CAPS_DISPLAY_DBUS);
DO_TEST("graphics-dbus-p2p",
QEMU_CAPS_DEVICE_CIRRUS_VGA,
QEMU_CAPS_DISPLAY_DBUS);
DO_TEST_CAPS_ARCH_LATEST("default-video-type-aarch64", "aarch64");
DO_TEST_CAPS_ARCH_LATEST("default-video-type-ppc64", "ppc64");
DO_TEST_CAPS_ARCH_LATEST("default-video-type-riscv64", "riscv64");