Add waylandsink fallback 13/20813/1 guppy 7.0.1 7.0.2 7.0.3 7.0.4 guppy/7.0.1 guppy/7.0.2 guppy/7.0.3 guppy/7.0.4 guppy_7.0.1 guppy_7.0.2 guppy_7.0.3 guppy_7.0.4
authorScott Murray <scott.murray@konsulko.com>
Tue, 26 Mar 2019 20:12:36 +0000 (16:12 -0400)
committerScott Murray <scott.murray@konsulko.com>
Tue, 26 Mar 2019 20:15:03 +0000 (20:15 +0000)
Add a check for vaapisink availability, and fall back to using
waylandsink if it is unavailable.  This should allow using a non-Intel
board for the cluster demo, though there are potentially issues around
having a H.264 decoder plugin available that may need to be addressed
in the target platform BSP (e.g. Raspberry Pi).

Change-Id: Ie351fe0cd6e36e3db6707b9202b3b1fd7c66d3ce
Signed-off-by: Scott Murray <scott.murray@konsulko.com>
app/main.cpp

index 400a066..967f5e4 100644 (file)
@@ -20,6 +20,8 @@
 #include <gst/gst.h>
 #include "surface.hpp"
 
+#undef DEBUG
+
 int main(int argc, char *argv[])
 {
        int port = 0;
@@ -49,11 +51,30 @@ int main(int argc, char *argv[])
        //
        //     videotestsrc pattern=smpte ! video/x-raw,format=BGRx,width=384,height=368 ! waylandsink
        //
+
        std::string pipeline_str = \
-               "udpsrc port=5005 ! application/x-rtp,media=video,encoding-name=H264 ! queue ! rtph264depay ! h264parse config-interval=1 disable-passthrough=true ! decodebin ! vaapisink";
+               "udpsrc port=5005 ! application/x-rtp,media=video,encoding-name=H264 ! queue ! rtph264depay ! h264parse config-interval=1 disable-passthrough=true ! decodebin ! ";
+       GstPlugin *plugin = gst_registry_find_plugin(gst_registry_get (), "vaapisink");
+       if(plugin) {
+               pipeline_str += "vaapisink";
+               gst_object_unref(plugin);
+       } else {
+               pipeline_str += "videoconvert ! video/x-raw,format=BGRx,width=384,height=368 ! waylandsink";
+       }
+#ifdef DEBUG
+       std::cout << "Using pipeline: " << pipeline_str << std::endl;
+#endif
 
         // Initialize GStreamer
+#ifdef DEBUG
+       int gargc = 2;
+       char **gargv = (char**) malloc(2 * sizeof(char*));
+       gargv[0] = strdup(argv[0]);
+       gargv[1] = strdup("--gst-debug-level=2");
+       gst_init(&gargc, &gargv);
+#else
         gst_init(NULL, NULL);
+#endif
 
        // Create our IVI surface handler
        SurfaceHandler handler(port, token, role);