mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/spice
synced 2025-12-31 02:41:52 +00:00
dcc: Check to see if the client supports multiple codecs
We need to determine if the client is new enough to support multiple codecs -- which might include any of the Gstreamer based ones. Cc: Gerd Hoffmann <kraxel@redhat.com> Cc: Marc-André Lureau <marcandre.lureau@redhat.com> Cc: Dongwon Kim <dongwon.kim@intel.com> Signed-off-by: Vivek Kasireddy <vivek.kasireddy@intel.com>
This commit is contained in:
parent
a5d1d957d6
commit
2b87aa74d6
@ -27,6 +27,8 @@
|
||||
|
||||
#include "push-visibility.h"
|
||||
|
||||
XXX_CAST(RedChannelClient, DisplayChannelClient, DISPLAY_CHANNEL_CLIENT);
|
||||
|
||||
struct DisplayChannelClientPrivate
|
||||
{
|
||||
SPICE_CXX_GLIB_ALLOCATOR
|
||||
|
||||
@ -494,29 +494,29 @@ RedSurfaceDestroyItem::RedSurfaceDestroyItem(uint32_t surface_id)
|
||||
|
||||
RedPipeItemPtr dcc_gl_scanout_item_new(RedChannelClient *rcc, void *data, int num)
|
||||
{
|
||||
/* FIXME: on !unix peer, start streaming with a video codec */
|
||||
if (!red_stream_is_plain_unix(rcc->get_stream()) ||
|
||||
!rcc->test_remote_cap(SPICE_DISPLAY_CAP_GL_SCANOUT)) {
|
||||
DisplayChannelClient *dcc = DISPLAY_CHANNEL_CLIENT(rcc);
|
||||
|
||||
if (dcc_is_gl_client(dcc)) {
|
||||
return red::make_shared<RedGlScanoutUnixItem>();
|
||||
} else if (rcc->test_remote_cap(SPICE_DISPLAY_CAP_MULTI_CODEC)) {
|
||||
return RedPipeItemPtr();
|
||||
} else {
|
||||
red_channel_warning(rcc->get_channel(),
|
||||
"FIXME: client does not support GL scanout");
|
||||
"Client does not support GL scanout or multiple codecs");
|
||||
rcc->disconnect();
|
||||
return RedPipeItemPtr();
|
||||
}
|
||||
|
||||
return red::make_shared<RedGlScanoutUnixItem>();
|
||||
}
|
||||
|
||||
XXX_CAST(RedChannelClient, DisplayChannelClient, DISPLAY_CHANNEL_CLIENT);
|
||||
|
||||
RedPipeItemPtr dcc_gl_draw_item_new(RedChannelClient *rcc, void *data, int num)
|
||||
{
|
||||
DisplayChannelClient *dcc = DISPLAY_CHANNEL_CLIENT(rcc);
|
||||
auto draw = static_cast<const SpiceMsgDisplayGlDraw *>(data);
|
||||
|
||||
if (!red_stream_is_plain_unix(rcc->get_stream()) ||
|
||||
!rcc->test_remote_cap(SPICE_DISPLAY_CAP_GL_SCANOUT)) {
|
||||
if (!dcc_is_gl_client(dcc) &&
|
||||
!rcc->test_remote_cap(SPICE_DISPLAY_CAP_MULTI_CODEC)) {
|
||||
red_channel_warning(rcc->get_channel(),
|
||||
"FIXME: client does not support GL scanout");
|
||||
"Client does not support GL scanout or multiple codecs");
|
||||
rcc->disconnect();
|
||||
return RedPipeItemPtr();
|
||||
}
|
||||
|
||||
@ -346,4 +346,10 @@ static inline void region_add_clip_rects(QRegion *rgn, SpiceClipRects *data)
|
||||
}
|
||||
}
|
||||
|
||||
static inline bool dcc_is_gl_client(DisplayChannelClient *dcc)
|
||||
{
|
||||
return red_stream_is_plain_unix(dcc->get_stream()) &&
|
||||
dcc->test_remote_cap(SPICE_DISPLAY_CAP_GL_SCANOUT);
|
||||
}
|
||||
|
||||
#endif /* DISPLAY_CHANNEL_PRIVATE_H_ */
|
||||
|
||||
Loading…
Reference in New Issue
Block a user