> > Avoid copy-pasting to add a new codec > --- > src/channel-display.c | 41 ++++++++++++++++++----------------------- > 1 file changed, 18 insertions(+), 23 deletions(-) > > diff --git a/src/channel-display.c b/src/channel-display.c > index 06d433b..a3ed555 100644 > --- a/src/channel-display.c > +++ b/src/channel-display.c > @@ -701,6 +701,18 @@ static HDC create_compatible_dc(void) > > static void spice_display_channel_reset_capabilities(SpiceChannel *channel) > { > + guint i; > + const struct { > + const SpiceVideoCodecType type; > + const int cap; > + const gchar *name; > + } gst_codecs[] = { > + {SPICE_VIDEO_CODEC_TYPE_MJPEG, SPICE_DISPLAY_CAP_CODEC_MJPEG, > "mjpeg"}, > + {SPICE_VIDEO_CODEC_TYPE_VP8, SPICE_DISPLAY_CAP_CODEC_VP8, "vp8"}, > + {SPICE_VIDEO_CODEC_TYPE_H264, SPICE_DISPLAY_CAP_CODEC_H264, "h264"}, > + {SPICE_VIDEO_CODEC_TYPE_VP9, SPICE_DISPLAY_CAP_CODEC_VP9, "vp9"}, > + }; > + Even better static const in this case. The two const for type and cap are not required but does not hurt. My paranoia says "char name[8];" save lot of bytes but is less flexible. > spice_channel_set_capability(SPICE_CHANNEL(channel), > SPICE_DISPLAY_CAP_SIZED_STREAM); > spice_channel_set_capability(SPICE_CHANNEL(channel), > SPICE_DISPLAY_CAP_MONITORS_CONFIG); > spice_channel_set_capability(SPICE_CHANNEL(channel), > SPICE_DISPLAY_CAP_COMPOSITE); > @@ -718,29 +730,12 @@ static void > spice_display_channel_reset_capabilities(SpiceChannel *channel) > #ifdef HAVE_BUILTIN_MJPEG > spice_channel_set_capability(SPICE_CHANNEL(channel), > SPICE_DISPLAY_CAP_CODEC_MJPEG); > #endif > - if (gstvideo_has_codec(SPICE_VIDEO_CODEC_TYPE_MJPEG)) { > - spice_channel_set_capability(SPICE_CHANNEL(channel), > - SPICE_DISPLAY_CAP_CODEC_MJPEG); > - } else { > - SPICE_DEBUG("GStreamer does not support the mjpeg codec"); > - } > - if (gstvideo_has_codec(SPICE_VIDEO_CODEC_TYPE_VP8)) { > - spice_channel_set_capability(SPICE_CHANNEL(channel), > - SPICE_DISPLAY_CAP_CODEC_VP8); > - } else { > - SPICE_DEBUG("GStreamer does not support the vp8 codec"); > - } > - if (gstvideo_has_codec(SPICE_VIDEO_CODEC_TYPE_H264)) { > - spice_channel_set_capability(SPICE_CHANNEL(channel), > - SPICE_DISPLAY_CAP_CODEC_H264); > - } else { > - SPICE_DEBUG("GStreamer does not support the h264 codec"); > - } > - if (gstvideo_has_codec(SPICE_VIDEO_CODEC_TYPE_VP9)) { > - spice_channel_set_capability(SPICE_CHANNEL(channel), > - SPICE_DISPLAY_CAP_CODEC_VP9); > - } else { > - SPICE_DEBUG("GStreamer does not support the vp9 codec"); > + for (i = 0; i < G_N_ELEMENTS(gst_codecs); i++) { > + if (gstvideo_has_codec(gst_codecs[i].type)) { > + spice_channel_set_capability(SPICE_CHANNEL(channel), > gst_codecs[i].cap); > + } else { > + SPICE_DEBUG("GStreamer does not support the %s codec", > gst_codecs[i].name); > + } > } > } > Frediano _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel