[Spice-devel] [client v8 21/24] spice-gtk: Allow disabling support for the builtin MJPEG video decoder

Francois Gouget fgouget at codeweavers.com
Tue Jan 12 02:57:40 PST 2016


This makes it possible to test the GStreamer video decoder with MJPEG
streams.

Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
---
 configure.ac               | 11 +++++++++++
 src/Makefile.am            |  7 ++++++-
 src/channel-display-priv.h |  2 ++
 src/channel-display.c      |  5 +++++
 4 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/configure.ac b/configure.ac
index 30d5d5e..2d1e2e0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -315,6 +315,17 @@ AS_IF([test "x$enable_gstvideo" != "xno"],
 )
 AM_CONDITIONAL([HAVE_GSTVIDEO], [test "x$have_gstvideo" = "xyes"])
 
+AC_ARG_ENABLE([builtin-mjpeg],
+  AS_HELP_STRING([--enable-builtin-mjpeg], [Enable the builtin mjpeg video decoder @<:@default=yes@:>@]),
+  [],
+  enable_builtin_mjpeg="yes")
+AS_IF([test "x$enable_builtin_mjpeg" = "xyes"],
+      [AC_DEFINE([HAVE_BUILTIN_MJPEG], 1, [Use the builtin mjpeg decoder?])])
+AM_CONDITIONAL(HAVE_BUILTIN_MJPEG, [test "x$enable_builtin_mjpeg" != "xno"])
+
+AS_IF([test "x$enable_builtin_mjpeg$enable_gstvideo" = "xnono"],
+      [SPICE_WARNING([No builtin MJPEG or GStreamer decoder, video will not be streamed])])
+
 AC_CHECK_LIB(jpeg, jpeg_destroy_decompress,
     AC_MSG_CHECKING([for jpeglib.h])
     AC_TRY_CPP(
diff --git a/src/Makefile.am b/src/Makefile.am
index cb99610..37a2234 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -257,7 +257,6 @@ libspice_client_glib_2_0_la_SOURCES =			\
 	channel-cursor.c				\
 	channel-display.c				\
 	channel-display-priv.h				\
-	channel-display-mjpeg.c				\
 	channel-inputs.c				\
 	channel-main.c					\
 	channel-playback.c				\
@@ -345,6 +344,12 @@ libspice_client_glib_2_0_la_SOURCES +=	\
 	$(NULL)
 endif
 
+if HAVE_BUILTIN_MJPEG
+libspice_client_glib_2_0_la_SOURCES +=	\
+	channel-display-mjpeg.c		\
+	$(NULL)
+endif
+
 if HAVE_GSTVIDEO
 libspice_client_glib_2_0_la_SOURCES +=	\
 	channel-display-gst.c		\
diff --git a/src/channel-display-priv.h b/src/channel-display-priv.h
index d8a03e9..2c64eb4 100644
--- a/src/channel-display-priv.h
+++ b/src/channel-display-priv.h
@@ -65,7 +65,9 @@ struct VideoDecoder {
  * @stream:     The associated video stream.
  * @return:     A pointer to a structure implementing the VideoDecoder methods.
  */
+#ifdef HAVE_BUILTIN_MJPEG
 VideoDecoder* create_mjpeg_decoder(int codec_type, display_stream *stream);
+#endif
 #ifdef HAVE_GSTVIDEO
 VideoDecoder* create_gstreamer_decoder(int codec_type, display_stream *stream);
 gboolean gstvideo_init(void);
diff --git a/src/channel-display.c b/src/channel-display.c
index c1ccde5..193f177 100644
--- a/src/channel-display.c
+++ b/src/channel-display.c
@@ -629,8 +629,11 @@ static void spice_display_channel_reset_capabilities(SpiceChannel *channel)
         spice_channel_set_capability(SPICE_CHANNEL(channel), SPICE_DISPLAY_CAP_STREAM_REPORT);
     }
     spice_channel_set_capability(SPICE_CHANNEL(channel), SPICE_DISPLAY_CAP_MULTI_CODEC);
+#ifdef HAVE_BUILTIN_MJPEG
     spice_channel_set_capability(SPICE_CHANNEL(channel), SPICE_DISPLAY_CAP_CODEC_MJPEG);
+#endif
     if (gstvideo_init()) {
+        spice_channel_set_capability(SPICE_CHANNEL(channel), SPICE_DISPLAY_CAP_CODEC_MJPEG);
         spice_channel_set_capability(SPICE_CHANNEL(channel), SPICE_DISPLAY_CAP_CODEC_VP8);
         spice_channel_set_capability(SPICE_CHANNEL(channel), SPICE_DISPLAY_CAP_CODEC_H264);
     }
@@ -1038,9 +1041,11 @@ static void display_handle_stream_create(SpiceChannel *channel, SpiceMsgIn *in)
     display_update_stream_region(st);
 
     switch (op->codec_type) {
+#ifdef HAVE_BUILTIN_MJPEG
     case SPICE_VIDEO_CODEC_TYPE_MJPEG:
         st->video_decoder = create_mjpeg_decoder(op->codec_type, st);
         break;
+#endif
     default:
 #ifdef HAVE_GSTVIDEO
         st->video_decoder = create_gstreamer_decoder(op->codec_type, st);
-- 
2.6.4



More information about the Spice-devel mailing list