Freeing main argv is not needed and must not be done.
[apps/camera-gstreamer.git] / app / main.cpp
index fff9c4c..d84ca26 100644 (file)
@@ -23,8 +23,6 @@
 #include <gst/video/videooverlay.h>
 #include <gst/wayland/wayland.h>
 
-#define DEFAULT_VIDEO_DEVICE   "/dev/video0"
-
 // these only applies if the window is a dialog/pop-up one
 // by default the compositor make the window maximized
 #define WINDOW_WIDTH_SIZE      640
@@ -160,7 +158,7 @@ get_next_buffer(struct window *window)
         * the 'old' one and force creation of the buffer with the newer
         * dimensions */
        if (window->wait_for_configure && window->maximized) {
-               if (!window->buffers[0].busy) {
+               if (!window->buffers[0].busy && window->buffers[0].buffer) {
                        wl_buffer_destroy(window->buffers[0].buffer);
                        window->buffers[0].buffer = NULL;
                        window->wait_for_configure = false;
@@ -669,7 +667,7 @@ int main(int argc, char *argv[])
 
        memset(pipeline_str, 0, sizeof(pipeline_str));
        snprintf(pipeline_str, sizeof(pipeline_str), "v4l2src device=%s ! video/x-raw,width=%d,height=%d ! waylandsink", 
-               DEFAULT_VIDEO_DEVICE, WINDOW_WIDTH_SIZE, WINDOW_HEIGHT_SIZE);
+               get_camera_device(), WINDOW_WIDTH_SIZE, WINDOW_HEIGHT_SIZE);
        gst_init(&gargc, &gargv);
 
        setbuf(stdout, NULL);
@@ -679,7 +677,7 @@ int main(int argc, char *argv[])
        GstElement *pipeline = gst_parse_launch(pipeline_str, &error);
        if (error || !pipeline) {
                fprintf(stderr, "gstreamer pipeline construction failed!\n");
-               free(argv);
+               free(gargv);
                return EXIT_FAILURE;
        }
 
@@ -702,7 +700,7 @@ int main(int argc, char *argv[])
        window = create_window(display, WINDOW_WIDTH_SIZE, WINDOW_HEIGHT_SIZE, app_id); 
 
        if (!window) {
-               free(argv);
+               free(gargv);
                return EXIT_FAILURE;
        }
 
@@ -733,7 +731,7 @@ int main(int argc, char *argv[])
 
        destroy_window(window);
        destroy_display(display);
-       free(argv);
+       free(gargv);
 
        gst_element_set_state(pipeline, GST_STATE_NULL);
        gst_object_unref(pipeline);